2026/4/2 14:07:38
网站建设
项目流程
产地证是在哪个网站上做,有很多长尾怎么做网站内容,网站建设 天津,wordpress级简主题Day 29#xff1a;【99天精通Python】数据持久化 - CSV与Excel - 办公自动化的第一步
前言
欢迎来到第29天#xff01;
在昨天的爬虫练习中#xff0c;我们成功从网页上抓取了数据。但这些数据如果只打印在终端里#xff0c;关掉窗口就没了#xff0c;实在太可惜。
在职场…Day 29【99天精通Python】数据持久化 - CSV与Excel - 办公自动化的第一步前言欢迎来到第29天在昨天的爬虫练习中我们成功从网页上抓取了数据。但这些数据如果只打印在终端里关掉窗口就没了实在太可惜。在职场中最通用的数据交换格式莫过于CSV和Excel。老板和同事通常只认 Excel 表格。如果你能把程序跑出来的结果直接生成一个漂亮的 Excel 报表那绝对是职场加分项。今天我们将学习如何用 Python 读写这两种格式的文件。这不仅是爬虫的后续更是办公自动化 (RPA)的基础。本节内容CSV 文件读写 (内置csv模块)DictReader与DictWriter的妙用Excel 文件读写 (第三方库openpyxl)操作工作簿 (Workbook)、工作表 (Sheet)、单元格 (Cell)实战练习将爬取的电影数据存入 Excel一、CSV 文件操作简单高效1.1 什么是 CSVCSV (Comma-Separated Values) 即逗号分隔值文件。它本质上就是纯文本每行一条记录字段之间用逗号分开。优点通用、轻量、可以用 Excel 打开。1.2 写入 CSVPython 内置了csv模块。importcsv data[[姓名,年龄,城市],[Alice,25,New York],[Bob,30,London],[Charlie,22,Beijing]]# newline 非常重要防止Windows下出现空行withopen(people.csv,w,encodingutf-8-sig,newline)asf:writercsv.writer(f)# 写入单行 (表头)writer.writerow(data[0])# 写入多行 (数据)writer.writerows(data[1:])print(CSV 写入完成)小贴士编码建议使用utf-8-sig这样 Excel 打开时才不会乱码BOM头。1.3 读取 CSVimportcsvwithopen(people.csv,r,encodingutf-8-sig)asf:readercsv.reader(f)forrowinreader:print(row)# 输出: [姓名, 年龄, 城市] ...1.4 像字典一样操作 (推荐)使用DictWriter和DictReader代码可读性更高。# --- 字典写入 ---headers[id,name,score]rows[{id:101,name:Tom,score:88},{id:102,name:Jerry,score:95}]withopen(scores.csv,w,encodingutf-8-sig,newline)asf:writercsv.DictWriter(f,fieldnamesheaders)writer.writeheader()# 写入表头writer.writerows(rows)# --- 字典读取 ---withopen(scores.csv,r,encodingutf-8-sig)asf:readercsv.DictReader(f)forrowinreader:print(f{row[name]}的分数是{row[score]})二、Excel 操作OpenPyXL虽然 CSV 很好用但它不支持格式颜色、字体、合并单元格。如果需要操作真正的.xlsx文件我们需要openpyxl库。安装pipinstallopenpyxl2.1 创建并写入 ExcelfromopenpyxlimportWorkbook# 1. 创建工作簿wbWorkbook()# 2. 获取激活的工作表 (默认第一个)wswb.active ws.title我的报表# 3. 写入表头ws[A1]商品ws[B1]价格ws[C1]销量# 4. 追加数据 (append 会自动寻找下一行)ws.append([iPhone 15,5999,100])ws.append([小米 14,3999,200])ws.append([华为 Mate60,6999,150])# 5. 保存文件wb.save(sales_report.xlsx)print(Excel 保存成功)2.2 读取 Excelfromopenpyxlimportload_workbook# 1. 加载现有的工作簿wbload_workbook(sales_report.xlsx)# 2. 获取指定的工作表wswb[我的报表]# 或者 ws wb.active# 3. 读取单元格print(ws[A2].value)# iPhone 15# 4. 遍历所有行print(\n--- 遍历数据 ---)# values_onlyTrue 直接返回数据而不是 Cell 对象forrowinws.iter_rows(min_row2,values_onlyTrue):product,price,salesrowprint(f商品:{product}, 销售额:{price*sales})2.3 简单的样式设置fromopenpyxl.stylesimportFont,PatternFill# 加载并修改wbload_workbook(sales_report.xlsx)wswb.active# 设置 A1 单元格加粗、红色字体ws[A1].fontFont(boldTrue,colorFF0000)# 设置 B1 单元格黄色背景ws[B1].fillPatternFill(solid,fgColorFFFF00)wb.save(sales_report_styled.xlsx)三、Pandas终极武器 (预告)我们在后面的【实战篇】会专门讲 Pandas。这里先提一句Pandas 读写 Excel 只需要一行代码。# 伪代码预览importpandasaspd# 读dfpd.read_excel(data.xlsx)# 写df.to_excel(output.xlsx,indexFalse)但openpyxl依然很重要因为 Pandas 不擅长精细的样式调整而openpyxl可以。四、实战练习豆瓣电影入库结合Day 28 (BeautifulSoup)的代码我们将爬取的豆瓣电影数据保存为 Excel 文件。importrequestsfrombs4importBeautifulSoupfromopenpyxlimportWorkbookdefsave_douban_to_excel():# 1. 准备 ExcelwbWorkbook()wswb.active ws.title豆瓣Top250ws.append([排名,电影名,评分,引言])# 表头# 2. 爬取数据 (简单演示第一页)urlhttps://movie.douban.com/top250headers{User-Agent:Mozilla/5.0 ... (省略)}# 记得补全 UAtry:# 为了演示这里假设请求成功# 实际代码请补全 requests 逻辑# ...# 模拟一些数据 (假设这是爬下来的)movies[(1,肖申克的救赎,9.7,希望让人自由。),(2,霸王别姬,9.6,风华绝代。),(3,阿甘正传,9.5,人生就像一盒巧克力。)]forrank,title,rating,quoteinmovies:ws.append([rank,title,rating,quote])# 3. 保存filenamedouban_top250.xlsxwb.save(filename)print(f数据已保存至{filename})exceptExceptionase:print(fError:{e})save_douban_to_excel()五、常见问题Q1PermissionError: [Errno 13] Permission denied这是因为你打开了 Excel 文件。Windows 锁定了文件Python 无法写入。解决关掉 Excel 软件再运行代码。Q2CSV 中文乱码假如用 Excel 打开乱码保存时使用encodingutf-8-sig。假如是 Pandas 读取乱码尝试encodinggbk。Q3openpyxl能处理.xls(老版Excel) 吗不能。openpyxl只支持.xlsx。如果要处理.xls需要用xlrd(读) 和xlwt(写) 库。但建议统统转为.xlsx。六、小结数据持久化CSVExcel内置 csv 模块writer / readerDictWriter (推荐)openpyxl 库Workbook (工作簿)Sheet (表)Cell (格)应用场景CSV: 数据交换, 简单存储Excel: 生成报表, 样式要求关键要点CSV是程序员的最爱简单、通用。Excel是老板的最爱带样式、易阅读。写入 CSV 记得newline和utf-8-sig。写入 Excel 记得最后wb.save()。七、课后作业成绩统计表创建一个 CSV 文件scores.csv包含 “姓名,语文,数学,英语”。读取该文件计算每个人的总分并将结果姓名,总分写入一个新的 Excel 文件result.xlsx。九九乘法表使用openpyxl生成一个 Excel 文件在 Sheet 中打印出九九乘法表。日志转换读取 Day 12 中生成的diary.txt将其内容解析后转存为 Excel两列[时间, 内容]。下节预告Day 30数据库操作 (SQLite)- 数据量再大一点怎么办Excel 存不下怎么办明天我们学习 Python 内置的轻量级数据库 SQLite体验真正的 SQL 魅力系列导航上一篇Day 28 - HTML解析库BeautifulSoup下一篇Day 30 - 数据库操作SQLite待更新