#关于 CSV
CSV 即逗号分隔的值(Comma-Separated Values),是一种以纯文本形式存储、以 , 分隔内容的表格文件格式。你可以直接使用 WPS Office、Microsoft 365、Numbers 表格等软件把表格导出为 CSV 文件。当然,你也可以使用上述软件,把 CSV 文件转换为对应表格格式文件。
Python 的标准库 csv 实现了 CSV 数据的读写,无需另外安装即可导入使用。
#读取 CSV 文件
#csv.reader 的使用
我们创建了一个存储了文娱活动得分情况的 CSV 文件 scores.csv。接着,我们可以直接执行如下程序输出这个 CSV 文件。
| |
程序第 $3$ 行打开了文件 scores.csv,并定义了换行符。接着,第 $4$ 行调用 csv.reader,并把结果赋给 spamreader。第 $5,6$ 行的循环遍历 spamreader,输出每一行。
输出结果:
| |
如果你只想输出某个或某些元素,那么你可以修改输出的内容。例如,如果你只想输出 score2(索引为 $2$),可以将 print(row) 修改为 print(row[2])。
#csv.DictReader 的使用
除了 csv.reader,csv.DictReader 也是一种不错的读取方式。它能以字典的形式读取 CSV 文件。
| |
这时,程序将会以字典形式输出 CSV 文件。
如果你只想输出一些特定的内容,可以修改输出的内容。例如,如果你只想输出 student_number 和 score2,可以将 print(row) 修改为如下代码。
| |
#写入 CSV 文件
#csv.writer 的使用
如果你需要添加学生的得分,你可以使用 csv.writer 的 writerow() 在 CSV 文件末尾添加行。
| |
程序第 $4$ 行调用 csv.writer,并把结果赋给 spamwriter。接着,第 $5,6$ 行分别插入学号为 $6,7$ 的学生的成绩。
如果你需要插入更多学生的成绩,csv.writer 的 writerows() 可能是更好的选择。
| |
writerows() 将能迭代出多个 row 对象的迭代器中的所有元素写入 CSV 文件,并根据当前设置的变种进行格式化。
#csv.DictWriter 的使用
csv.DictWriter 与 csv.writer 相似,使用 writerow() 和 writerows(),但其参数为字典。
#变种与格式参数
CSV 文件存在多种不同的格式。例如,, 并不是唯一的分隔符,\t、:、; 都是较为多用的制表符。为了更容易指定输入和输出记录的格式,csv 模块可以自定义变种与格式参数。
Dialect.delimiter为用于分隔字段的单字符,默认为','。Dialect.doublequote控制出现在字段中的引号字符本身应如何被引出。当该属性为True时,双写引号字符。如果该属性为False,则在 引号字符 的前面放置 转义符。默认值为True。Dialect.escapechar是用于csv.writer的单字符,用来在quoting设置为QUOTE_NONE时转义定界符,在doublequote设置为False时转义引号字符。在读取时,escapechar去除了其后所跟字符的任何特殊含义。该属性默认为None,表示禁用转义。Dialect.lineterminator是放在csv.writer产生的行的结尾,默认为'\r\n'。Dialect.quotechar是单字符,用于包住含有特殊字符的字段,特殊字符如定界符或引号字符或换行符。默认为'"'。Dialect.quoting控制csv.writer何时生成引号,以及csv.reader何时识别引号。默认值为QUOTE_MINIMAL。Dialect.skipinitialspace如果为True,则忽略定界符之后的空格。默认值为False。Dialect.strict如果为True,则在输入错误的 CSV 时抛出Error异常。默认值为False。
#写入中文后文件乱码
这一问题是文件编码方式不当导致的。你可以在使用 Python 打开文件时设置编码方式。
| |