【问题标题】:Encoding headaches with ' character in Python, Excel在 Python、Excel 中使用 ' 字符编码头痛
【发布时间】:2016-10-29 19:30:49
【问题描述】:

我正在将一个 txt 文件读入 Python,提取其中的一部分,然后将结果输出为 CSV。

问题是,我遇到了不知道如何解决的编码问题。这是发生了什么:

  1. 输入文件是从 Adob​​e Acrobat 导出的,在将设置更改为“UTF-8”后,我在其中输出“纯文本文件”。

  2. 然后我像这样将其读入 Python

    inputfile=codecs.open(inputfile, "r", "utf-8")
    
  3. 我运行一个正则表达式来提取其中的一部分,将它们变成一个熊猫DataFrame(这里称为“数据帧”)。

  4. 然后它将数据帧作为 csv 文件写出,但无论我怎么做,我都会遇到问题。我试过了

    outputfile=codecs.open(outputfile, "w", "utf-8")
    dataframe.to_csv(outputfile, encoding="utf-8")
    

但这给了我一个

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 23:  ordinal not in range(128)

问题:

这是我不明白的第一件事:如果我设置 to_csv encoding="utf-8",为什么会涉及“ascii”编解码器?接docs,这是一个

表示要在输出文件中使用的编码的字符串,在 Python 2 上默认为“ascii”...

我可以通过不在codecs.open() 中指定“utf-8”来避免此错误。但是,一旦我将文件导入 Excel(将导入设置为“Unicode-Utf-8”),所有 ' 字符都显示为 __。据我所知,没有其他编码错误,如果我在 TextWrangler 中打开 csv 文件,一切正常。

  • 问题出在哪里——是pandas的输出吗? Excel 还是其他什么?

  • 有没有更好的方法来解决这个问题?

我在 Mac 上使用 Python 2。我没有使用 Python csv 模块,因为没有解决方法它不会执行 UTF。

感谢任何帮助!

编辑: 这是输入文件在 WordWrangler 中的样子:

23 它躺在地板上。

这里是 Excel:

它躺在地板上。

在 Fawful 的有用评论之后,我还尝试在 Excel 中打开原始文本文件。似乎它已经将 ' 编码为 __ 。

【问题讨论】:

    标签: python csv pandas encoding utf-8


    【解决方案1】:

    所以看起来这是一个 Excel(至少 Mac Excel 2011)问题;似乎虽然它确实提供了“Unicode UTF-8”设置,但它实际上无法处理 unicode 字符。

    参见例如这个SO post 和这个来自微软的post。我的文件在 Numbers 中打开得很好。甚至不知道我在这台机器上有那个......

    【讨论】:

      【解决方案2】:

      从您的 pandas 数据框写入文件时,请不要使用codecs 文件对象。 pandas.to_csv() 已经 对您的数据进行编码,然后codecs 文件对象必须尝试解码(作为 ASCII)才能重新编码它。

      只需使用常规文件:

      with open(outputfile, "w") as outputfile:
          dataframe.to_csv(outputfile, encoding="utf-8")
      

      您也可以使用csv 模块,但是在将行传递给csv.writer().writerow() 函数之前,您必须将所有行数据编码为UTF-8csv module examples section 包含为您自动执行此操作的代码。

      【讨论】:

      • 谢谢!我有一个关于(outputfile, "w", "utf-8") 的快速问题——这对我不起作用,它要求一个“整数”。 open 真的可以采用“utf-8”设置吗?我在文档中也找不到它......如果我摆脱了 utf-8 部分,一切正常,但 Excel 仍然以同样的方式搞砸了。我认为这是 Acrobat 导出的问题,但在 WordWrangler 中一切正常......
      • @patrick:抱歉,这是我的错误,复制和粘贴错误。
      • 啊,好吧!不过,很高兴了解熊猫编码的事情。我将尝试使用 csv 模块,但开始认为这不是我真正在做的事情,而是 Excel 或 Acrobat。
      【解决方案3】:

      不是一个干净的解决方案,但为了快速修复,只需使用 .replace('\0xe2', ' ')。

      【讨论】:

      • 谢谢,这确实可行!我宁愿避免这种情况,因为我还有几个文件要处理,而且我担心黑客可能会积累......
      猜你喜欢
      • 2017-12-05
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多