[英]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.