从CSV文件错误中将unicode值解码为文本

时间:2018-11-05 06:00:11

标签: python csv unicode syntax-error

我在csv文件中有一列,该列具有以普通文本形式编写的Unicode值(\ x)。我有以下代码(不是我的代码),我试图用它来解码此文本,但是在尝试使用它时会引发语法错误。

with open("fixed_datasetssscopy.csv", "r") as fp:
    file_buffer = io.StringIO()
    for line in fp.read().splitlines():
        file_buffer.write(eval('''b"{}".decode('utf-8')'''.format(line)))
        file_buffer.write('\n')
    file_buffer.seek(0)
df = pandas.from_csv(file_buffer)

当我在IDE中打印它们时,查看引发错误的条目时,将它们括在引号“”中,即使在CSV文件本身中也没有。出现错误的某些条目的示例如下。

ER...in the end it's a job. So, fair dos. https:/asdasd
When i started using Gutenberg like a month ago, I didn't care for the workflow but now it makes it easy to do thin\xe2\x80\xa6 https:/asdasd

实际错误消息是:

Traceback (most recent call last):
  File "C:/Users", line 8, in <module>
    file_buffer.write(eval('''b"{}".decode('utf-8')'''.format(line)))
  File "<string>", line 1
    b""ER...in the end it's a job. So, fair dos. https://u",,,,,,,,,".decode('utf-8')
    ^
SyntaxError: invalid syntax

如何解决此错误?

1 个答案:

答案 0 :(得分:0)

由于输入字符串中有\“,因此出现了错误。我对代码进行了一些更改,以使其正常工作。

快速修复

with open("fixed_datasetssscopy.csv", "r") as fp:
    file_buffer = io.StringIO()
    for line in fp.read().splitlines():
       file_buffer.write(bytes(line, "utf-8").decode("unicode_escape"))
       file_buffer.write('\n')
    file_buffer.seek(0)
df = pandas.DataFrame.from_csv(file_buffer)

代码中的另一个问题是您使用pandas.from_csv而不是pandas.DataFrame.from_csv

此外,建议您使用pandas.read_csv而不是from_csv。这是因为DataFrame.from_csv现在已过时(请参见here)。

Pandas.read_csv也比from_csv快得多。您可以找到有关read_csv here

的文档

更好的解决方案

如果您的输入字符串具有实际的Unicode字符,则上述解决方案将不起作用。在您的示例中,它将以'的形式输出\'之类的字符

如果确定输入集中的所有字符均为ASCII文本,则可以继续使用上述解决方案

如果输入中包含ASCII序列,则可以手动替换输入中的“ \”。

这已经由rspeer here

完成