使用python将带有逗号的文本写入CSV文件中的单元格

使用python将带有逗号的文本写入CSV文件中的单元格,python,csv,Python,Csv,我想将带有逗号的文本写入CSV文件的单元格中 输入 “1,2,3,你好” CSV格式的输出应为 '1,2,3','Hello'这不是特定于Python的,而是与 如果要将控件字符作为值的一部分写入,则需要通过将其括在双引号中来转义该值: f.write('1,2,3,45,"The Next comma I want to write and not separate to another cell, so this sentence will be whole",6,7,8') 编辑:尽管在

我想将带有逗号的文本写入CSV文件的单元格中

输入

“1,2,3,你好”

CSV格式的输出应为


'1,2,3','Hello'

这不是特定于Python的,而是与

如果要将控件字符作为值的一部分写入,则需要通过将其括在双引号中来转义该值:

f.write('1,2,3,45,"The Next comma I want to write and not separate to another cell, so this sentence will be whole",6,7,8')
编辑:尽管在实践中,使用其他人建议的CSV编写器界面将是一个更好的主意。如果有一个现成的库可以为您提取实现细节,那么将自己卷入实现细节永远都不是一个好主意。

使用适当的:

产出:

垃圾邮件,“可爱的,垃圾邮件”

文件的每一行都是一条数据记录。每条记录由一个或多个字段组成,用逗号分隔

用逗号分隔字段的基本思想很清楚,但当字段数据也可能包含逗号甚至嵌入换行符时,这种思想就变得复杂了

CSV实现可能无法处理此类字段数据,或者可能使用引号将字段括起来。-从

因此,您可以使用引号围绕每个字段文本

假设输入是
['1,2,3','Hello']
,CSV的输出应该是
“1,2,3”,“Hello”
,您可以使用下面的代码来实现这一点

>>> ",".join('"{0}"'.format(s) for s in ['1,2,3', 'Hello'])
'"1,2,3","Hello"'
但是当文本中有一些特殊符号时,例如
\n
等,您会遇到问题

python csv库已经为您处理了所有边缘案例

写入文件 可以使用@Dominic Rodger答案

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'))
>>> spamWriter.writerow(['Spam', 'Lovely, Spam'])
写入字符串 从

在Python 3中:

>>> import io
>>> import csv
>>> output = io.StringIO()
>>> csvdata = [1,2,'a','He said "what do you mean?"',"Whoa!\nNewlines!"]
>>> writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC)
>>> writer.writerow(csvdata)
59
>>> output.getvalue()
'1,2,"a","He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'
Python 2的一些细节需要稍作更改:

>>> output = io.BytesIO()
>>> writer = csv.writer(output)
>>> writer.writerow(csvdata)
57L
>>> output.getvalue()
'1,2,a,"He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'

我遇到了下一个错误:AttributeError:“\u csv.writer”对象没有属性“writer”。没有csv模块,有没有办法做到这一点?-1没有以二进制模式打开csv输出文件。Windows上的输出:
“垃圾邮件”,可爱的垃圾邮件“\r\r\n'
@John-errr-是的,根据Python文档-@John-很公平,已经更改了。@Dominic:可能您指的是这个示例。您没有注意到前面有一句含糊不清的话:“如果csvfile是一个文件对象,那么在有区别的平台上,它必须使用‘b’标志打开。”。Windows是一个平台,在这里它确实发挥了作用。合理的做法是在输入和输出文件上始终使用二进制模式——这使得脚本或给新手的建议与平台无关;与
打印
不同,
写入
方法不为您提供。
>>> output = io.BytesIO()
>>> writer = csv.writer(output)
>>> writer.writerow(csvdata)
57L
>>> output.getvalue()
'1,2,a,"He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'