CSV表格数据的读写

浏览 809

课文

在python里面我们处理 CSV 格式数据需要 csv 模块。

这模块 python 已经自带了,我们无需安装。

认识一下CSV格式的文件

针对 CSV 格式的文件我们通常会用Excel打开。

约定俗成的情况下第一行通常是列名,之后的内容是数据。

image

然后我们也可以用记事本或 vscode之类的编辑器直接打开 csv 格式的文件, 打开后我们可以一目了然地发现。CSV是一种很简单的保存文件的格式,直接是明明白白地把表格当成文本来保存,针对每列的数据以 ,(逗号) 作为区分。

*,逗号是最常见的分隔符,也有以其他符号作为分隔符的情况存在。*

image

了解了这些对我们更好地操作 csv 格式的文件就有了很大的帮助。

CSV文件的读取

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 的编码。

当同学们在读取一个文件字符报错或乱码时,第一反应应该去检查自己的编码对不对。

单位:见下方表格
视频名称 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表格的写入。

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

我们来看下那些参数,首先是打开一个文件时的几个参数:

  • mode='r' 这个代表着以写入方式打开文件
  • encoding='utf-8-sig' 我们以 utf-8-sig 的编码保存字符, utf-8-sig 有一个更常见的名字 带有BOM的utf-8

image

用这种编码都是为了照顾CSV格式在 windows 系统中的显示,如果直接采用常见的 utf-8 则会在 windows 下的EXCEL中打开为乱码。

image

  • newline='' 表示我们禁止文件在写入时对换行符进行额外处理,因为 CSV 模块已经预处理过。

初始化一个 CSV writer 时的参数:

  • delimiter=',' 以逗号作为分隔符

由于我们的第一行通常是列名, 我们可以添加一行。

employee_writer.writerow(["名称", "职业", "年龄"])

image

我们还有另一种写法:

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