【问题标题】:Writing Escape Characters to a Csv File in Python在 Python 中将转义字符写入 Csv 文件
【发布时间】:2011-09-27 15:23:53
【问题描述】:

我在 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 模块的引用、双引号、escapechar 和其他参数的组合,但我似乎无法使其工作。有谁知道这是怎么回事?

*注意 - 我也在使用编解码器 encode("utf-8"),所以 text1 看起来真的很像 "I like to \n ride my bike".encode("utf-8")

【问题讨论】:

    标签: python file csv escaping


    【解决方案1】:

    问题不在于将它们写入文件。问题是\n''"" 内部时是一个换行符。你真正想要的是'I like to \\n ride my bike'r'I like to \n ride my bike'(注意r 前缀)。

    【讨论】:

    • 就是这样。感谢那。我仍在尝试找出转换为字符串文字的最佳方法。我发现效果最好的是text = "%r" % "I like to \n ride my bike".encode("utf-8"),然后使用text[1:-1]
    • @crunkchitis 为什么你需要打电话给.encode()?您使用的字符串似乎来自您的源代码。
    • 是的,我想你是对的。现在我使用的是原始字符串,我不再需要调用编码。我使用的文本中有很多 unicode 字符,所以在我开始使用原始字符串之前,我使用了 encode 以便 csv 可以读取 unicode 文本。
    【解决方案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,因为我使用的是 raw 细绳。我的文本中有很多 unicode 字符 使用,所以在我开始使用原始字符串之前,我使用的是编码所以 那个 csv 可以读取 unicode 文本

    没有任何意义——正如我所说,"ascii string".encode('utf8') 毫无意义。

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

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2011-10-18
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      相关资源
      最近更新 更多