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

1 投票
2 回答
6567 浏览
提问于 2025-04-17 03:12

我在用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 个回答

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 只包含ASCII字节,那么 str_object.encode("utf-8") 就完全没有意义——它什么都不做。否则,它会抛出一个异常。

第四,这条评论:

我现在不需要再调用encode了,因为我在使用原始字符串。我的文本中有很多unicode字符,所以在开始使用原始字符串之前,我一直在使用encode,这样csv才能读取unicode文本。

这句话听起来没什么道理——就像我说的,"ascii string".encode('utf8') 是没有意义的。

考虑退一步,解释一下你到底想做什么:你的数据来自哪里,里面有什么,最重要的是,读取这个文件的过程会做些什么?

3

问题不在于把它们写入文件。真正的问题是,当你在单引号''或双引号""里面使用\n时,它会被当作换行符。你其实想要的是'我喜欢\\n骑自行车'或者r'我喜欢\n骑自行车'(注意前面的r)。

撰写回答