为什么许多写csv文件的教程将模式设置为'wb'?

4 投票
1 回答
3175 浏览
提问于 2025-04-18 07:25

举个例子:在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'

撰写回答