我有一个包含一些二进制数据的文本文件。当我使用 Python 3 在文本模式下读取文件时,我收到一个 UniCodeDecodeError (编解码器无法解码字节...),其中包含以下代码行:
fo = open('myfile.txt, 'r')
for line in inFile:
如何从我的文件中删除二进制数据。我有一个在每个二进制数据之前打印的标题(在本例中它显示为数据块)。例如,我的文件看起来像这样,我想删除 çºí?¼Èדñdí”:
我的文件.txt:
ABCDEFGH
123456
Data Block 11
çºí?¼Èדñdí
XYZ123
我想要的结果是 myfile.txt 如下所示:
ABCDEFGH
123456
Data Block 11
XYZ123
这很困难,因为“二进制”斑点may包含有效的字符或字符序列。如果您使用的文件包含使用多字节编码的“文本”,请忘记它。
If you know文件中的“文本”仅包含单字节字符,一种方法是以字节形式读取文件,然后使用类似
encode('ascii', error='ignore')
这有效地从输出中去除非 ASCII 字符,但如果您要在文件上执行此操作,您将得到:
ABCDEFGH
123456
Data Block
?d
XYZ123
请注意倒数第二行——在 blob 中找到了有效的 ascii 字符并被视为“文本”。
您可以从这样的解决方案开始,然后对其进行微调(如果可能)以满足您的需求。也许这些斑点本身就出现在线上,所以如果一条线有any非 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='')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)