python 读写 csv 总结
1. 问题描述
每次都查系列,总结一下,以方便下次查。
在 Python 中,你可以使用内置的 csv
模块来读写 CSV(Comma-Separated Values)文件。
以下是一些基本的示例,展示如何使用 csv
模块来实现这一功能。
(1) 读取 CSV
文件
1 | import csv |
(2) 写入 CSV
文件
1 | import csv |
使用 DictReader
和 DictWriter
如果你的 CSV 文件有表头,并且你想要以字典的形式读取或写入数据,可以使用 csv.DictReader
和 csv.DictWriter
。
(3) 读取 CSV
文件(使用 DictReader
)
1 | import csv |
(4) 写入 CSV
文件(使用 DictWriter
)
1 | import csv |
(5) 关于参数 newline=''
在 Python 中使用 open()
函数打开文件时,参数 newline=''
是用于指定文件在读取或写入时如何处理行终止符。这个参数在处理 CSV 文件时尤为重要,因为 CSV 文件的行分隔通常依赖于操作系统。
行终止符
- Unix/Linux 系统:使用
\n
作为行终止符。 - Windows 系统:使用
\r\n
作为行终止符。 - Mac 系统(旧版,OS X 之前):使用
\r
作为行终止符。
newline
参数的作用
当使用 open()
函数打开文件进行读取或写入时,newline
参数决定了 Python 如何处理这些行终止符:
- **
newline=''
**:告诉 Python 忽略行终止符,将它们视为普通的字符。这通常是处理文本文件(如 CSV)时的首选设置,因为它可以防止在读取或写入过程中出现意外的行合并或分隔。 - **
newline=None
**:默认值。告诉 Python 根据操作系统自动处理行终止符。这意味着在 Windows 上,Python 会将\r\n
视为行终止符;在 Unix/Linux 和 Mac 上,\n
是行终止符。 - **
newline='\n'
,'\r'
,'\r\n'
**:显式指定行终止符。这在某些特定情况下可能很有用,但通常不推荐,因为它会使代码依赖于特定的操作系统。
为什么在打开 CSV 文件时使用 newline=''
当你使用 csv.reader
或 csv.writer
处理 CSV 文件时,通常希望确保文件的行结构在读取和写入过程中保持不变。如果文件是在不同的操作系统上创建的,行终止符可能会不同,这可能会导致解析错误或数据不一致。
使用 newline=''
可以确保:
- 无论文件是在哪个操作系统上创建的,Python 都会以一致的方式处理行终止符。
- 防止在读取 CSV 文件时,由于行终止符的处理不当而导致的数据行合并或拆分。
- 在写入 CSV 文件时,可以控制生成的行终止符,确保文件格式的一致性。
这是一个好习惯,特别是在处理跨平台的文本文件时,可以避免很多与操作系统相关的兼容性问题。
(6) 来个读写一起的栗子
input.csv
文件内容(其实就是 (4) 写入CSV
文件的执行结果):
Name | Age | City |
---|---|---|
Alice | 24 | New York |
Bob | 27 | Los Angeles |
- 测试脚本栗子:根据 input.csv 内容,输出 output.csv
1 | import csv |
output.csv
文件内容
城市 | 名字 | 年龄 | 分数 |
---|---|---|---|
Alice | 24 | New York | 0 |
Bob | 27 | Los Angeles | 0 |