Python:得到\ xa0而不是CSV中的空格,无法删除或转换

Dex*_* Ju 4 python csv encoding utf-8

我有一个与python(IPython笔记本)中的编码问题有关的问题.由于这类问题非常普遍和简单,但我仍然无法真正解决它.

我这里有一个CSV文件,你可以看到我们在这个文件中有很多'\ xa0'和其他'\n'字符.

我用了

with io.open(train_fname) as f:
for line in f:
    line = line.encode("ascii", "replace")
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我总是得到以下输出.

想象一下,你可以说,你知道什么,没有制裁,没有永久听取IEAA的规定,不再隐藏\ xa0under\xa0借助友好的核能.\ xa0你有2天的时间;\xa0i.e.在检查员中,退出杀害平民.

我试过其他方法

line.replace(u"\xa0", " ") 它也没有用,我也尝试了各种编码在我的文本编辑,崇高文本中打开这个CSV文件.我尝试了windows-1252,utf-8和所有其他编码,但在查看此CSV文件时,我总是得到\ xa0是我的文本编辑.

这是否意味着

\ XA0

已经在此CSV文件中写为输入文本?这不是python编码的问题吗?如果是这种情况,为什么我不能使用replace方法来简单地替换这个字符串?\ xa0表示文件编码在哪?编码?这意味着这个文件是用utf-8编写的,但我试图在ascii或其他情况下打开它?

我搜索了许多问题,但似乎没有提供太多帮助.如果我的问题不是很清楚,请问我.非常感谢你!

`

Rol*_*lig 8

\xa0你看到的是4个字符的序列:\ x a 0.所有这些字符都是纯ASCII,因此这里没有字符集问题.

显然,你应该解释这些转义序列.你用空格替换它们的想法是好的,但你必须小心反斜杠字符.当它出现在字符串文字中时,必须写入\\.试试这个:

line.replace("\\xa0", " ")
Run Code Online (Sandbox Code Playgroud)

要么:

line.replace(r"\xa0", " ")
Run Code Online (Sandbox Code Playgroud)

r在前面的字符串意味着字面解释每个字符,甚至反斜杠.


请注意,CSV文件中的数据充满了不一致.例子:

  • \n 可能意味着一个换行符.
  • \\n 也出现了,它也可能意味着一个线路.
  • \xa0 是一个不间断的空间,以ISO-8859-1编码.
  • \xc2\xa0 是一个不间断的空间,以UTF-8编码.
  • \\xc2\\xa0 也出现了,意思相同.
  • \\\\n 也出现了.

因此,要从该文件中获取有意义的内容,您应该重复解释转义序列,直到没有任何变化.之后,尝试将生成的字节序列解释为UTF-8.如果它工作,很好.如果没有,请将其解释为代码页1252(这是ISO-8859-1的超集).