CSV表格数据的读写

浏览 581

课文

在python里面我们处理 CSV 格式数据需要 `csv` 模块。 这模块 python 已经自带了,我们无需安装。 ## 认识一下CSV格式的文件 针对 CSV 格式的文件我们通常会用Excel打开。 约定俗成的情况下第一行通常是列名,之后的内容是数据。 ![image](https://qiniu.3yya.com/aec8807dd093bcad25e0f4ada8ec749a/aec8807dd093bcad25e0f4ada8ec749a.png) 然后我们也可以用记事本或 `vscode`之类的编辑器直接打开 csv 格式的文件, 打开后我们可以一目了然地发现。CSV是一种很简单的保存文件的格式,直接是明明白白地把表格当成文本来保存,针对每列的数据以 `,`(逗号) 作为区分。 `*,`逗号是最常见的分隔符,也有以其他符号作为分隔符的情况存在。\* ![image](https://qiniu.3yya.com/17c54752557783a5b1a88dcde694e7f2/17c54752557783a5b1a88dcde694e7f2.png) 了解了这些对我们更好地操作 `csv` 格式的文件就有了很大的帮助。 ## CSV文件的读取 ``` python import csv with open("截至2020年12月16日B站电竞行业播放数前100位的视频情况.csv", encoding="utf-8") as csvfile: spamreader = csv.reader(csvfile, delimiter=",") for row in spamreader: print(" ".join(row)) ``` 打开文件时的`encoding` 参数表示我们用什么编码打开文件,这必须与我们的文件保存编码一致。 这个文件当初保存时是 `utf-8`的编码,因此我这里标记了使用 `utf-8` 的编码。 当同学们在读取一个文件字符报错或乱码时,第一反应应该去检查自己的编码对不对。 ``` python 单位:见下方表格 视频名称 UP主 播放量(次) 弹幕数(个) 投稿日期 Lying man第二季 小辉辉特困生 3547000 266000 2015-11-09 卢本伟White五五开的生化危机7 的墨迹之旅 四季皆你 2957000 133000 2017-01-28 大家好,我是EDG.Clearlove,今天我入驻B站辣! EDG_Clearlove 3297000 95000 2020-07-09 ...... ``` ## CSV文件的写入 下面这几行代码完成一个基本CSV表格的写入。 ``` python import csv with open( "employee_file.csv", mode="w", encoding="utf-8-sig", newline="" ) as employee_file: employee_writer = csv.writer(employee_file, delimiter=",") employee_writer.writerow(["小明", "程序员", "22"]) employee_writer.writerow(["鸣人", "火影", "20"]) employee_writer.writerow(["柯南", "小学生", "10"]) ``` ![image](https://qiniu.3yya.com/edaff0b5c9df200b62050cd119c38b71/edaff0b5c9df200b62050cd119c38b71.png) 我们来看下那些参数,首先是打开一个文件时的几个参数: * `mode='r'` 这个代表着以写入方式打开文件 * `encoding='utf-8-sig'` 我们以 `utf-8-sig` 的编码保存字符, `utf-8-sig` 有一个更常见的名字 `带有BOM的utf-8` 。 ![image](https://qiniu.3yya.com/08f6258795d7454abf856a6dee719f35/08f6258795d7454abf856a6dee719f35.png) 用这种编码都是为了照顾CSV格式在 `windows` 系统中的显示,如果直接采用常见的 `utf-8` 则会在 `windows` 下的EXCEL中打开为乱码。 ![image](https://qiniu.3yya.com/1216c3913d03c76943eb539f13560352/1216c3913d03c76943eb539f13560352.png) * `newline=''` 表示我们禁止文件在写入时对换行符进行额外处理,因为 CSV 模块已经预处理过。 初始化一个 CSV writer 时的参数: * `delimiter=','` 以逗号作为分隔符 由于我们的第一行通常是列名, 我们可以添加一行。 ``` python employee_writer.writerow(["名称", "职业", "年龄"]) ``` ![image](https://qiniu.3yya.com/4da6c57f453bdba190c69e72db495ce8/4da6c57f453bdba190c69e72db495ce8.png) 我们还有另一种写法: ``` python with open( "employee_file.csv", mode="w", encoding="utf-8-sig", newline="" ) as employee_file: employee_writer = csv.DictWriter( employee_file, delimiter=",", fieldnames=["名称", "职业", "年龄"] ) employee_writer.writeheader() employee_writer.writerow({"名称": "小明", "职业": "程序员", "年龄": "22"}) employee_writer.writerow({"名称": "鸣人", "职业": "火影", "年龄": "20"}) employee_writer.writerow({"名称": "柯南", "职业": "小学生", "年龄": "10"}) ``` 通过 csv 的 `DictWriter` 创建一个写入器, 在创建时通过 `fieldnames` 参数定义列名。并在之后写入时将字典作为参数,根据键名把值对应到相应的单元格上。

评论

登录参与讨论

暂无评论

共 0 条
  • 1
前往
  • 1