添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Python:在CSV中得到了\xa0而不是空格,并且不能删除或转换。

6 人关注

我有一个问题,与python(IPython笔记本)中的编码问题有关。这类问题很常见,也很简单,但我还是不能真正解决它。

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

I used

with io.open(train_fname) as f:
for line in f:
    line = line.encode("ascii", "replace")

但它没有工作,我总是得到以下输出。

想象一下,你可以说,你知道吗,没有制裁,没有永远的IEAA条例听证会,没有更多的隐藏,没有友好核能的幌子。\你有2天的时间;也就是说,让检查员进来,停止杀害平民。

I tried other methods like

【替换代码1 这也不行,我也试过各种编码,在我的文本编辑器中打开这个CSV文件,sublime text。 我试过windows-1252、utf-8和其他所有的编码,但当我查看这个CSV文件时,我的文本编辑器总是显示为xa0。

这是否意味着

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

我搜索了许多问题,但它们似乎没有提供什么帮助。如果我的问题不是很清楚,请问我。 非常感谢您!

2 个评论
替换代码0】的方法并不能在原地工作。
你的输入文件是什么编码?
python
csv
encoding
utf-8
Dexter Ju
Dexter Ju
发布于 2016-05-30
2 个回答
Roland Illig
Roland Illig
发布于 2016-05-30
已采纳
0 人赞同

你看到的 \xa0 是一个由4个字符组成的序列。替换代码1【替换代码2【替换代码3 0 。所有这些字符都是普通的ASCII,所以这里没有字符集问题。

显然,你应该解释这些转义序列。你用空格代替它们的想法很好,但你必须对反斜杠字符加以注意。当它出现在一个字符串字面时,必须写成 \\ 。所以,请尝试这样做。

line.replace("\\xa0", " ")
line.replace(r"\xa0", " ")

字符串前面的r意味着要按字面意思解释每个字符,甚至是反斜杠。

请注意,CSV文件中的数据充满了不一致之处。例子。

  • \n probably means a linebreak.
  • \\n also appears, and it probably means a linebreak also.
  • \xa0 is a nonbreaking space, encoded in ISO-8859-1.
  • \xc2\xa0 is a nonbreaking space, encoded in UTF-8.
  • \\xc2\\xa0 also appears, with the same meaning.
  • \\\\n also appears.
  • 因此,为了从该文件中获得有意义的内容,你应该反复解释转义序列,直到没有任何变化。之后,尝试将产生的字节序列解释为UTF-8。如果成功了,那就好。如果不行,就把它解释为Codepage 1252(这是ISO-8859-1的一个超集)。

    我添加了一些关于CSV文件内容的评论。祝你玩得开心 :)
    哦,还有最重要的一点。与其默默地修复你收到的疯狂的破损数据,不如向你收到数据的来源抱怨。他们必须为你提供格式良好的数据。既然他们连数据格式都不正确,我也不会相信有效载荷是正确的。
    user149341
    发布于 2016-05-30
    0 人赞同

    \xa0 代表的字符是 u+00a0: 无断裂空间 .

    然而,你的字符串并不包括字符 "\xa0" ;它包括了 字面意义上的文字 \xa0 (即Python字符串 "\\xa0" ),以及一些其他的编码字符。(在文本编辑器中打开文件,你就会明白我的意思。)你可以使用 string_escape 的编码将这些字符转换成它们所代表的字符。