Day 29:【99天精通Python】数据持久化 - CSV与Excel - 办公自动化的第一步

Day 29:【99天精通Python】数据持久化 - CSV与Excel - 办公自动化的第一步

前言

欢迎来到第29天!

在昨天的爬虫练习中,我们成功从网页上抓取了数据。但这些数据如果只打印在终端里,关掉窗口就没了,实在太可惜。

在职场中,最通用的数据交换格式莫过于CSVExcel。老板和同事通常只认 Excel 表格。如果你能把程序跑出来的结果直接生成一个漂亮的 Excel 报表,那绝对是职场加分项。

今天,我们将学习如何用 Python 读写这两种格式的文件。这不仅是爬虫的后续,更是办公自动化 (RPA)的基础。

本节内容:

  • CSV 文件读写 (内置csv模块)
  • DictReaderDictWriter的妙用
  • Excel 文件读写 (第三方库openpyxl)
  • 操作工作簿 (Workbook)、工作表 (Sheet)、单元格 (Cell)
  • 实战练习:将爬取的电影数据存入 Excel

一、CSV 文件操作:简单高效

1.1 什么是 CSV?

CSV (Comma-Separated Values) 即逗号分隔值文件。它本质上就是纯文本,每行一条记录,字段之间用逗号分开。
优点:通用、轻量、可以用 Excel 打开。

1.2 写入 CSV

Python 内置了csv模块。

importcsv data=[["姓名","年龄","城市"],["Alice",25,"New York"],["Bob",30,"London"],["Charlie",22,"Beijing"]]# newline='' 非常重要,防止Windows下出现空行withopen("people.csv","w",encoding="utf-8-sig",newline='')asf:writer=csv.writer(f)# 写入单行 (表头)writer.writerow(data[0])# 写入多行 (数据)writer.writerows(data[1:])print("CSV 写入完成!")

小贴士:编码建议使用utf-8-sig,这样 Excel 打开时才不会乱码(BOM头)。

1.3 读取 CSV

importcsvwithopen("people.csv","r",encoding="utf-8-sig")asf:reader=csv.reader(f)forrowinreader:print(row)# 输出: ['姓名', '年龄', '城市'] ...

1.4 像字典一样操作 (推荐)

使用DictWriterDictReader,代码可读性更高。

# --- 字典写入 ---headers=["id","name","score"]rows=[{"id":101,"name":"Tom","score":88},{"id":102,"name":"Jerry","score":95}]withopen("scores.csv","w",encoding="utf-8-sig",newline='')asf:writer=csv.DictWriter(f,fieldnames=headers)writer.writeheader()# 写入表头writer.writerows(rows)# --- 字典读取 ---withopen("scores.csv","r",encoding="utf-8-sig")asf:reader=csv.DictReader(f)forrowinreader:print(f"{row['name']}的分数是{row['score']}")

二、Excel 操作:OpenPyXL

虽然 CSV 很好用,但它不支持格式(颜色、字体、合并单元格)。如果需要操作真正的.xlsx文件,我们需要openpyxl库。

安装:

pipinstallopenpyxl

2.1 创建并写入 Excel

fromopenpyxlimportWorkbook# 1. 创建工作簿wb=Workbook()# 2. 获取激活的工作表 (默认第一个)ws=wb.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 读取 Excel

fromopenpyxlimportload_workbook# 1. 加载现有的工作簿wb=load_workbook("sales_report.xlsx")# 2. 获取指定的工作表ws=wb["我的报表"]# 或者 ws = wb.active# 3. 读取单元格print(ws['A2'].value)# iPhone 15# 4. 遍历所有行print("\n--- 遍历数据 ---")# values_only=True 直接返回数据,而不是 Cell 对象forrowinws.iter_rows(min_row=2,values_only=True):product,price,sales=rowprint(f"商品:{product}, 销售额:{price*sales}")

2.3 简单的样式设置

fromopenpyxl.stylesimportFont,PatternFill# 加载并修改wb=load_workbook("sales_report.xlsx")ws=wb.active# 设置 A1 单元格:加粗、红色字体ws['A1'].font=Font(bold=True,color="FF0000")# 设置 B1 单元格:黄色背景ws['B1'].fill=PatternFill("solid",fgColor="FFFF00")wb.save("sales_report_styled.xlsx")

三、Pandas:终极武器 (预告)

我们在后面的【实战篇】会专门讲 Pandas。这里先提一句:Pandas 读写 Excel 只需要一行代码。

# 伪代码预览importpandasaspd# 读df=pd.read_excel("data.xlsx")# 写df.to_excel("output.xlsx",index=False)

openpyxl依然很重要,因为 Pandas 不擅长精细的样式调整,而openpyxl可以。


四、实战练习:豆瓣电影入库

结合Day 28 (BeautifulSoup)的代码,我们将爬取的豆瓣电影数据保存为 Excel 文件。

importrequestsfrombs4importBeautifulSoupfromopenpyxlimportWorkbookdefsave_douban_to_excel():# 1. 准备 Excelwb=Workbook()ws=wb.active ws.title="豆瓣Top250"ws.append(["排名","电影名","评分","引言"])# 表头# 2. 爬取数据 (简单演示第一页)url="https://movie.douban.com/top250"headers={"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. 保存filename="douban_top250.xlsx"wb.save(filename)print(f"数据已保存至{filename}")exceptExceptionase:print(f"Error:{e}")save_douban_to_excel()

五、常见问题

Q1:PermissionError: [Errno 13] Permission denied

这是因为你打开了 Excel 文件。Windows 锁定了文件,Python 无法写入。
解决:关掉 Excel 软件,再运行代码。

Q2:CSV 中文乱码?

  • 假如用 Excel 打开乱码:保存时使用encoding="utf-8-sig"
  • 假如是 Pandas 读取乱码:尝试encoding="gbk"

Q3:openpyxl能处理.xls(老版Excel) 吗?

不能。openpyxl只支持.xlsx。如果要处理.xls,需要用xlrd(读) 和xlwt(写) 库。但建议统统转为.xlsx


六、小结

数据持久化

CSV

Excel

内置 csv 模块

writer / reader

DictWriter (推荐)

openpyxl 库

Workbook (工作簿)

Sheet (表)

Cell (格)

应用场景

CSV: 数据交换, 简单存储

Excel: 生成报表, 样式要求

关键要点

  1. CSV是程序员的最爱,简单、通用。
  2. Excel是老板的最爱,带样式、易阅读。
  3. 写入 CSV 记得newline=''utf-8-sig
  4. 写入 Excel 记得最后wb.save()

七、课后作业

  1. 成绩统计表:创建一个 CSV 文件scores.csv,包含 “姓名,语文,数学,英语”。读取该文件,计算每个人的总分,并将结果(姓名,总分)写入一个新的 Excel 文件result.xlsx
  2. 九九乘法表:使用openpyxl生成一个 Excel 文件,在 Sheet 中打印出九九乘法表。
  3. 日志转换:读取 Day 12 中生成的diary.txt,将其内容解析后转存为 Excel,两列:[时间, 内容]。

下节预告

Day 30:数据库操作 (SQLite)- 数据量再大一点怎么办?Excel 存不下怎么办?明天我们学习 Python 内置的轻量级数据库 SQLite,体验真正的 SQL 魅力!


系列导航

  • 上一篇:Day 28 - HTML解析库BeautifulSoup
  • 下一篇:Day 30 - 数据库操作SQLite(待更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1150782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础掌握HardFault异常处理机制的基本原理

破解HardFault之谜:从崩溃现场还原程序“死亡瞬间”你有没有遇到过这样的场景?代码烧进去,设备上电后一切正常,突然毫无征兆地卡死——没有日志、无法复现、JTAG一连才发现:程序停在了while(1)里,而调用栈清…

微服务分布式SpringBoot+Vue+Springcloud仁康医院预约挂号系统

目录 微服务分布式医院预约挂号系统摘要 开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 微服务分布式医院预约挂号系统摘要 该系统基于SpringBoot、Vue和SpringCloud技术栈构建,采用微服务架构实现高并发、高可用…

企业级桂林旅游景点导游平台管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着旅游业的快速发展,信息化管理成为提升旅游服务质量和效率的重要手段。桂林作为国际知名的旅游城市,拥有丰富的自然和人文景观,但传统的旅游管理模式难以满足现代游客的个性化需求。企业级桂林旅游景点导游平台管理系统的开发&#x…

从零实现内核崩溃分析:WinDbg解析DMP蓝屏文件完整指南

从崩溃中读懂真相:手把手教你用 WinDbg 深度解析蓝屏 DMP 文件你有没有遇到过这样的场景?服务器毫无征兆地重启,只留下一个神秘的MEMORY.DMP文件;或者刚装完新驱动,系统瞬间蓝屏,错误码一闪而过——想查问题…

HID协议入门指南:常见术语与框架介绍

HID协议从零到实战:嵌入式开发者的深度指南 你有没有遇到过这样的场景? 插上一个自制的USB键盘,电脑却无法识别按键;或者做了一个BLE游戏手柄,安卓手机连上了却不会震动。问题可能不在硬件电路,而在于——…

L298N典型应用电路搭建手把手教程

手把手教你用L298N驱动直流电机:从零搭建稳定控制电路你有没有遇到过这样的情况?写好了Arduino程序,信心满满地给小车通电,结果电机纹丝不动——或者只转一个方向,还“嗡嗡”发热。别急,问题很可能出在电机…

微服务分布式SpringBoot+Vue+Springcloud受灾区救援物资管理系统优惠

目录微服务分布式救援物资管理系统概述核心功能模块技术优势优惠方案社会价值开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!微服务分布式救援物资管理系统概述 基于SpringBootVueSpringCloud的受灾区救援物资管理系统采用分布…

Vlm-Transformer_demo

import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import random# 1. 准备数据(字符级语料) # 简单语料(自己构造,无需下载) #训练样本数: 89 | 词汇表字符: [ , a…

微服务分布式SpringBoot+Vue+Springcloud四川自驾游攻略管理系统

目录微服务分布式SpringBootVueSpringCloud四川自驾游攻略管理系统摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!微服务分布式SpringBootVueSpringCloud四川自驾游攻略管理系统摘要 该系统基于微服务分布式架构&#xff…

微服务分布式SpringBoot+Vue+Springcloud微信小程序的宠物美容预约系统设计与实现

目录摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着宠物经济的快速发展,宠物美容服务的需求日益增长。传统的线下预约方式存在效率低、信息不对称等问题。基于此,设计并实现了一套基于微服…

USB转串口驱动安装步骤通俗解释

电脑没串口?一文搞懂USB转串口驱动安装与芯片选型 你有没有遇到过这种情况:手握一块开发板,连上USB线准备调试,打开设备管理器却发现“未知设备”或者根本找不到COM口?明明线插好了,灯也亮了,就…

Java SpringBoot+Vue3+MyBatis 网站系统源码|前后端分离+MySQL数据库

摘要 随着互联网技术的快速发展,现代Web应用对高性能、模块化和可扩展性的需求日益增长。传统的单体架构在应对复杂业务逻辑和高并发场景时逐渐显现出局限性,前后端分离架构因其灵活性、开发效率高和易于维护等特点成为主流解决方案。基于此背景&#xf…

易连说-如何寻找具备 Drummond Group AS2 国际认证的EDI 产品?

在数字化供应链重构的浪潮中,电子数据交换(EDI)已从“可选配置”升级为企业对接全球贸易伙伴的“必备能力”。作为 EDI 数据传输的主流协议——AS2 协议凭借安全加密、可靠传输的特性,成为企业间数据交换的核心选择,选…

AD画PCB中HDMI高速通道设计项目应用详解

如何在Altium Designer中搞定HDMI高速通道设计?一文讲透实战要点你有没有遇到过这样的情况:板子打回来了,HDMI接口连上去却黑屏、闪屏,甚至压根不识别显示器?明明原理图画得没错,元器件也焊上了&#xff0c…

小白指南:USB接口各引脚功能详解入门篇

从零开始搞懂USB:别再被那几根线难住了!你有没有试过自己焊一条USB线,结果接上电脑没反应,甚至烧了接口?或者想给开发板单独供电,却不知道哪根线是电源、哪根是地?又或者好奇为什么有些安卓手机…

大数据分布式事务:CAP定理视角下的解决方案对比

大数据分布式事务:CAP定理视角下的解决方案对比关键词:大数据、分布式事务、CAP定理、解决方案对比摘要:本文主要从CAP定理的视角出发,深入探讨大数据分布式事务的多种解决方案。首先介绍了大数据分布式事务的背景知识和CAP定理的…

企业级大创管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着高等教育改革的不断深化,大学生创新创业训练计划(大创)已成为培养创新型人才的重要途径。传统的大创项目管理多依赖手工操作或简易电子表格,存在信息分散、流程不透明、统计效率低下等问题。高校亟需一套标准化、数字化的…

微服务分布式SpringBoot+Vue+Springcloud万里学院摄影作品活动报名商城系统社团管理系统

目录摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 该系统基于微服务分布式架构,采用SpringBoot、Vue.js和SpringCloud技术栈,为万里学院设计了一套集摄影作品展示、活动报名、商城交易及社团…

Win11升级后Multisim数据库异常?核心要点解析

Win11升级后Multisim打不开元件库?一文讲透数据库异常的底层真相与实战修复你有没有遇到过这种情况:辛辛苦苦把电脑从Win10升级到Win11,结果一打开熟悉的Multisim——满屏报错,“multisim数据库无法访问”几个大字赫然在目&#x…

嘉立创EDA原理图注释与标注操作指南:提升图纸可读性

嘉立创EDA原理图注释与标注实战:让电路图“会说话”你有没有遇到过这样的情况?打开一张几个月前自己画的原理图,满屏飞线交错、元件编号跳跃混乱,连电源线都找不到从哪来、到哪去。更别提团队协作时,同事指着某个引脚问…