在Python中将转义字符写入Csv文件

时间:2011-09-27 15:23:53

标签: python file csv escaping

我在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")

2 个答案:

答案 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')毫无意义。

考虑向后两步,并解释你真正想要做的事情:你的数据来自哪里,里面有什么,最重要的是,将要读取文件的过程是什么?