使用'Python,Excel中的字符编码头痛

我正在将一个txt文件读入Python,提取部分文件然后以CSV格式输出结果 .

问题是,我得到编码打嗝,我不知道如何解决 . 这是发生的事情:

  • 输入文件是从Adobe Acrobat导出的,我在将设置更改为“UTF-8”后输出“纯文本文件” .

  • 然后我就这样读到了Python

inputfile=codecs.open(inputfile, "r", "utf-8")
  • 我运行一个正则表达式来提取它的一部分,将它们变成一只大熊猫 DataFrame (这里称为'dataframe') .

  • 然后它将数据帧写成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'-codec的问题?按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中打开原始文本文件 . 好像它已经编码'as __在那一个 .

回答(3)

3 years ago

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

3 years ago

从pandas数据帧写入文件时,请 not 使用 codecs 文件对象 . pandas.to_csv() 已经对您的数据进行了编码,然后 codecs 文件对象必须尝试解码(作为ASCII)以便能够对其进行重新编码 .

只需使用常规文件:

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

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

3 years ago

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

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