为什么许多写csv文件的教程将模式设置为'wb'?
举个例子:在Python中写入csv文件
with open('StockPrice.csv', 'wb') as f:
为什么我们在处理csv文件时需要以二进制模式打开呢?
这是习惯使然,还是说在某些情况下,使用二进制模式处理csv文件是必须的呢?
1 个回答
7
在Windows系统上使用csv
模块写输出时,必须用模式"wb"
,因为csv
模块会把换行符写成\r\n
,不管你在哪个平台上运行。
如果你在Windows上,用模式"w"
打开一个文件,Python每次写入换行时都会多加一个回车符。所以如果你用模式"w"
的文件来写csv
模块的输出,你最终会得到\r\r\n
的换行符,因为Python和csv
模块都添加了回车符。
这里有一个简单的程序来演示这个结果。注意,我们用二进制模式"rb"
来读取文件,以防Python在读取文件时把\r\n
替换成\n
:
import csv
with open("output.csv", "w") as f:
w = csv.writer(f)
w.writerow([1,2,3,4])
w.writerow([5,6,7,8])
with open("output.csv", "rb") as f:
print repr(f.read())
当我在Windows上运行这个时,我得到了以下输出:
'1,2,3,4\r\r\n5,6,7,8\r\r\n'