在Python中将转义字符写入Csv文件
我在用Python的csv模块处理文件时,转义字符总是搞得我的csv文件乱七八糟。比如说,如果我有以下内容:
import csv
rowWriter = csv.writer(open('bike.csv', 'w'), delimiter = ",")
text1 = "I like to \n ride my bike"
text2 = "pumpkin sauce"
rowWriter.writerow([text1, text2])
rowWriter.writerow(['chicken','wings'])
我希望我的csv文件看起来像这样:
I like to \n ride my bike,pumpkin sauce
chicken,wings
但是最后却变成了这样:
I like to
ride my bike,pumpkin sauce
chicken,wings
我试过了各种组合,比如引号、双引号、转义字符和csv模块的其他参数,但就是搞不定。有没有人知道这是怎么回事?
*注意 - 我还在用codecs的encode("utf-8"),所以text1实际上看起来像 "I like to \n ride my bike".encode("utf-8")
2 个回答
首先,你为什么想让 r"\n"
(两个字节)出现在你的文件里,而不是 "\n"
(一个字节)呢?输出文件的使用者应该怎么处理这些内容?是要对每个输入字段使用 ast.evaluate_literal()
吗?如果你的实际数据里有非ASCII字符、撇号或引号,那我会非常小心使用 repr()
来序列化它。
其次,你要么是把代码写错了,要么是输出结果写错了(或者两者都有)。你展示的代码实际上会产生:
"I like to
ride my bike",pumpkin sauce
chicken,wings
第三,关于你的 "I like to \n ride my bike".encode("utf-8")
:如果 str_object
只包含ASCII字节,那么 str_object.encode("utf-8")
就完全没有意义——它什么都不做。否则,它会抛出一个异常。
第四,这条评论:
我现在不需要再调用encode了,因为我在使用原始字符串。我的文本中有很多unicode字符,所以在开始使用原始字符串之前,我一直在使用encode,这样csv才能读取unicode文本。
这句话听起来没什么道理——就像我说的,"ascii string".encode('utf8')
是没有意义的。
考虑退一步,解释一下你到底想做什么:你的数据来自哪里,里面有什么,最重要的是,读取这个文件的过程会做些什么?
问题不在于把它们写入文件。真正的问题是,当你在单引号''
或双引号""
里面使用\n
时,它会被当作换行符。你其实想要的是'我喜欢\\n骑自行车'
或者r'我喜欢\n骑自行车'
(注意前面的r
)。