删除文本文件中的所有不可打印的ASCII UTF-8字符

时间:2016-04-24 21:59:46

标签: utf-8 text-files ascii

我有一个文本文件,我试图在记事本++中查看。该文件包含一列中的爬行动物亚种名称列表,然后我的DNA序列ID被我认为只是白色空间分开。但是当我打开文本文件时,空间似乎被GSVT等不可打印的字符占用。

例如:

子物种名称,不可打印的字符,序列ID,不可打印的字符,序列ID ......等等,直到下一行:

Ablepharus bivittatus GSGSGSGSGS 36660 VT 4560 VT 23400

有没有办法可以从文本文件中删除所有这些不可打印的GSVT个字符?当我尝试打印文件中的每一行时,由于我在记事本++中看到的这些控制字符,我不断得到奇怪的间距。我能以任何方式使它只是正常打印而不会出现不可打印字符的所有间距中断吗?

更新

我使用了user312016's advice并为Python安装了chardet。我发现文件是用 UTF-16LE 编码的。

我从Dropbox的教授那里得到了这个文件。该文件已压缩,我所做的只是解压缩文件。这是一个.txt文件,我确信他没有提到使用其他脚本来解析数据。

当我点击解压缩的.txt文件以在常规记事本中打开它时,它会显示我认为是我打开时看到的GSVT的奇怪符号记事本中的文件++。

2 个答案:

答案 0 :(得分:1)

您必须知道您的文件编码的编码方式。 您的问题来自于您使用与存储设备上写入的不同且不兼容的编码对文件进行解码的事实。

然后,你只需做这样的事情:

with open('file.txt', rb) as f:
    file_decoded = f.read().decode('the_encoding_of_the_file')

如果您不知道编码,则无法继续执行此操作。但您仍然可以使用将尝试确定编码的库,如chardet

答案 1 :(得分:1)

在"文本"中遇到奇怪的字符时文件,正确的要做的事情是联系创建文件的人(可能只是通过阅读他们网站上的其他地方)来找出他们试图发送给你的东西。像字符编码这样的元信息,更不用说像文件和记录格式这样的更复杂的想法,大部分都是在带外传输的,这意味着你最多只会在文件本身中找到它们的提示。

但是,在这种情况下,你可能有一个"纯文本"使用一些较为模糊的ASCII control codes来分隔表中记录和字段的文件。

您遇到的群组分隔符及其兄弟姐妹,旨在将ASCII文本数据的字段和行(以及更奇怪的细分)分开,就像您拥有的那样。这里是我上面链接的维基百科图表中的相关行,删除了一些:

       Python
Dec    String    Abbr  Keyboard  Name
--------------------------------------
11     '\x0b'    VT    Ctrl-K    Vertical Tab

28     '\x1c'    FS    Ctrl-\    File Separator
29     '\x1d'    GS    Ctrl-]    Group Separator
30     '\x1e'    RS    Ctrl-^    Record Separator
31     '\x1f'    US    Ctrl-_    Unit Separator

您遇到的那个Group Separators字符串可能表示一堆空组彼此相邻,就像一堆逗号彼此相邻('Obama,Barack,,,,44')表示CSV表示中的空单元格一样电子表格。垂直选项卡可能分开"行" (代替上述分隔符之一,或者除此之外)。

但这只是猜测。这个文件可能不是"纯文本"根本,但一些数据库或电子表格程序的导出格式。同样,任何发布数据的人都应该在某处解释文件格式......如果没有,如果你不能联系他们,那么你就会得到有根据的猜测。