我在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
我尝试过引用,双引号,escapechar和csv模块的其他参数的组合,但我似乎无法使它工作。有谁知道这有什么意思?
*注意 - 我也使用编解码器编码(“utf-8”),因此text1看起来真的像"I like to \n ride my bike".encode("utf-8")
答案 0 :(得分:3)
问题不在于将它们写入文件。问题是\n
是''
或""
内的换行符。您真正想要的是'I like to \\n ride my bike'
或r'I like to \n ride my bike'
(注意r
前缀)。
答案 1 :(得分:0)
首先,为什么要在文件中显示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.encode("utf-8")
如果str_object
仅包含ASCII字节,则绝对毫无意义 - 它什么都不做。否则会引发异常。
第四,这个评论:
我不再需要调用编码了,现在我正在使用raw 串。我的文本中有很多unicode字符 使用,所以在我开始使用原始字符串之前,我正在使用编码 csv可以读取unicode文本
没有任何意义 - 正如我所说,"ascii string".encode('utf8')
毫无意义。
考虑向后两步,并解释你真正想要做的事情:你的数据来自哪里,里面有什么,最重要的是,将要读取文件的过程是什么?