Python3:编写csv文件

Python3:编写csv文件,python,windows,csv,python-3.x,Python,Windows,Csv,Python 3.x,我试图在Windows计算机上使用Python3.2编写一个简单的CSV文件,但是我没有运气。从: 生成一个文件,其中每一行都以字节序列\r\n结尾,因此当您使用MS Excel等工具打开每一行时,它看起来都有一个额外的空行。这不是一个“CSV文件” 请注意,如果我在Python3.2中尝试使用,则在尝试使用spamWriter.writerow时会出现一个错误(其中文件模式的最大区别是'w'与'wb'): 回溯(最近一次调用last):TypeError中第1行的文件“”:“str”不支持缓冲

我试图在Windows计算机上使用Python3.2编写一个简单的CSV文件,但是我没有运气。从:

生成一个文件,其中每一行都以字节序列
\r\n
结尾,因此当您使用MS Excel等工具打开每一行时,它看起来都有一个额外的空行。这不是一个“CSV文件”

请注意,如果我在Python3.2中尝试使用,则在尝试使用spamWriter.writerow时会出现一个错误(其中文件模式的最大区别是
'w'
'wb'
):

回溯(最近一次调用last):TypeError中第1行的文件“”:“str”不支持缓冲区接口


如何在Windows计算机上从Python 3.2编写简单的CSV文件?

要直接回答您的问题,您应该能够使用格式化参数:

…因此,修改此行应该有效(未经测试):


至于为什么这个例子不能开箱即用,在我看来有点像一个bug。

文档说应该使用
open('eggs.csv','w',newline='')

如a中所示:

csv.writer(csvfile,dialogue='excel',**fmtparms)


如果csvfile是文件对象,则应使用换行符=''打开它。

如果未指定换行符='',则嵌入带引号字段中的换行符将无法正确解释,并且在写入时使用换行符的平台上,将添加额外的换行符。指定换行符=''应该总是安全的,因为csv模块有自己的(通用)换行符处理

以下变体适用于Linux和Windows:

spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=' ', quotechar='|',
                        quoting=csv.QUOTE_MINIMAL, newline='')
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

这将适用于Python 2和Python 3:

if sys.version_info >= (3,0,0):
    f = open(filename, 'w', newline='')
else:
    f = open(filename, 'wb')
[适用于Python 2.x] spamWriter的这个实现正在为我工作

with open('assignmentresults.csv', 'wb') as csvfile:
  spamwriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
  spamwriter.writerow(["Hullo", "World"])

我在将一个代码从Python2.6.6移到python3.4.3时解决了这个错误

Python2.6.6(我正在尝试对我的csvfile进行一些模糊处理)

上面的代码在python2.6.6上运行得很好,但在python3.4.3上不起作用,因为我在尝试运行python3文件时遇到了一些utf-8 unicode错误,所以我做了以下更改 蟒蛇3.4.4

import codecs
with codecs.open(os.path.join(path, name) , 'r', encoding='ISO-8859-1') as mycsvfile:
writer = csv.writer(open(newFilename, 'w'))

就是这样,我的代码现在运行良好,基本上python3没有考虑一些unicode,我们需要使用编解码器导入使其工作,希望它能有所帮助。

问题似乎是Windows特有的。在Linux上运行良好。啊,似乎我选择了稍旧的文档版本(-0.1)(比较vs)。这不是Python 3的答案,它会引发“TypeError:'str'不支持缓冲区接口”在py34中尝试执行此操作时,我得到了一个
TypeError:“newline”是此函数的无效关键字参数。这是这里唯一对我有效的答案。五年后,这些示例仍然无法开箱即用:-(什么是
mycsvfile
,缩进呢?
with open('assignmentresults.csv', 'wb') as csvfile:
  spamwriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
  spamwriter.writerow(["Hullo", "World"])
with open( os.path.join(path, name) , 'r') as mycsvfile:
writer = csv.writer(open(newFilename, 'w'))
import codecs
with codecs.open(os.path.join(path, name) , 'r', encoding='ISO-8859-1') as mycsvfile:
writer = csv.writer(open(newFilename, 'w'))