【问题标题】:How to remove nonprintable characters in csv file? [closed]如何删除csv文件中的不可打印字符? [关闭]
【发布时间】:2021-05-07 13:32:26
【问题描述】:

我的文件中有一些我要删除的无效字符。但是我遇到了一个奇怪的问题。

当我尝试使用替换功能时,我收到一个错误 SyntaxError: EOL while scanning string literal。

我发现我正在处理\x1d,它是一个组分隔符。我有这个代码来删除它:

import pandas as pd 

df = pd.read_csv('C:/Users/tkp/Desktop/Holdings_Download/dws/example.csv',index_col=False, sep=';', encoding='utf-8')

print(df['col'][0])

df = df['col'][0].encode("utf-8").replace(b"\x1d", b"").decode()
df = pd.DataFrame([x.split(';') for x in df.split('\n')])

print(df[0][0])

输出:

还有其他方法可以做到这一点吗?因为在我看来,我不能做得更糟。

【问题讨论】:

  • 你能提供一个可重现的例子吗?
  • 您似乎遇到了某种字符编码问题。如果我是一个赌徒,我敢打赌那个奇怪的字符应该是一个“ö”,这样整个事情就变成了“Coöperatiev”(似乎在荷兰语中很常见)。您能检查一下 CSV 文件的相应行中实际包含哪些字节值吗?
  • 你的做法有什么不好?请用客观的术语解释您认为“更好”的解决方案是什么样的。
  • @Ture Pålsson 10 个字节,包括第 10 个不可见字节。

标签: python python-3.x ascii non-ascii-characters


【解决方案1】:

请注意,您收到了 SyntaxError。这意味着 Python 永远不会真正运行您的程序,因为它无法弄清楚程序 是什么

说实话,我不太清楚为什么会在这种情况下发生这种情况,但是在字符串常量中使用“外来”字符总是有点不确定,因为它使您依赖于源代码的字符编码是什么,让你任由各种有问题的编辑器摆布。因此,我建议使用'\uXXXX' 语法为您要替换的字符显式写入Unicode 编号。 (看起来你这里是 U+2194 双箭头,所以'\u2194' 应该这样做。)

话虽如此,我将首先验证这确实是问题所在,方法是将'↔' 位更改为更普通的东西,例如'x',并查看这是否会导致相同的错误。如果是这样,那么您的问题出在其他地方...

【讨论】:

  • csv 文件本身没有任何内容。在 xml 中并粘贴到 python 编辑器后,是的。我还注意到这个字符被视为跨越多行的字符串,因为使用三引号会将一些字符串带到新行。
【解决方案2】:

您必须指定在字符集中定义此字符的编码。

df = df.replace('#', '', encoding='utf-8')

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2012-01-21
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多