我想用逗号将文本写入CSV文件中的单元格。
输入
'1,2,3,Hello'
CSV格式的输出应为
'1,2,3','Hello'
答案 0 :(得分:13)
使用正确的CSV writers:
>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'))
>>> spamWriter.writerow(['Spam', 'Lovely, Spam'])
输出:
垃圾邮件,“可爱,垃圾邮件”
答案 1 :(得分:5)
这不是特定于Python的,而是与CSV "standard"。
有关如果您想将控制字符作为值的一部分进行编写,则需要通过用双引号将其包围来转义值:
f.write('1,2,3,45,"The Next comma I want to write and not seperate to anoterh cell , so this sentence will bw hole",6,7,8')
编辑:虽然在实践中,按照其他人的建议使用CSV编写器界面会更好。当有一个现成的库为你抽象出来时,将自己包含在实现细节中绝不是一个好主意。
答案 2 :(得分:1)
文件的每一行都是数据记录。每条记录由一个或多个字段组成,以逗号分隔。
使用逗号分隔字段的基本思路很明确,但是当字段数据也可能包含逗号或嵌入的换行符时,这个想法会变得复杂。
CSV实现可能无法处理此类字段数据,或者它们可能使用引号来围绕字段。 - 来自https://en.wikipedia.org/wiki/Comma-separated_values
因此,您可以使用引号括起每个字段文本。
假设输入为['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'])
来自https://stackoverflow.com/a/9157370/5238892。
在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'