繁体   English   中英

在python中从文本文件中剥离二进制数据

[英]strip out binary data from text file in python

我有一个包含一些二进制数据的文本文件。 当我使用Python 3在文本模式下读取文件时,出现以下代码行的UniCodeDecodeError(编解码器无法解码字节...):

fo = open('myfile.txt, 'r')
for line in inFile:

如何从文件中删除二进制数据。 我有一个在每个二进制数据之前打印的标题(在这种情况下,它显示为数据块)。 例如,我的文件看起来像是要删除çºí?¼Èדñdí”的文件:

myfile.txt文件:

ABCDEFGH
123456
Data Block 11
çºí?¼Èדñdí
XYZ123

我想要的结果是myfile.txt看起来像这样:

ABCDEFGH
123456
Data Block 11
XYZ123

这很困难,因为“二进制”斑点可能包含有效字符或字符序列。 而且,如果您使用的是带有多字节编码的“文本”文件,那就别管它了。

如果您知道文件中的“文本”仅包含单字节字符,则一种方法是将文件读取为字节,然后使用类似

encode('ascii', error='ignore')

这可以有效地从输出中去除非ASCII字符,但是如果要在文件上执行此操作,则会得到:

ABCDEFGH
123456
Data Block
?d
XYZ123

请注意倒数第二行-在blob中找到了有效的ascii字符并将其视为“文本”。

您可以从这样的解决方案开始,然后对其进行微调(如果可能)以满足您的需求。 可能是斑点本身在行上出现,因此,如果一行中有任何非ASCII字符,请完全丢弃整个行。 也许您可以看一下斑点并尝试使用它的某些结构。 也许您只是满足于在那里有部分字符的随机行,然后以某种方式处理它们。 这是特定于应用程序的。

这是我用来从示例输入生成该输出的代码:

def strip_nonascii(b):
    return b.decode('ascii', errors='ignore')

with open('garbled.txt', 'rb') as f:
    for line in f:
        print(strip_nonascii(line), end='')

如果在二进制数据之后也有页脚(例如具有标头),请尝试使用regexp将标头/页脚之间的所有内容全部替换为空吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM