我有一个包含一些二进制数据的文本文件.当我使用Python 3读取文件时,在文本模式下,我得到一个UniCodeDecodeError(编解码器不能解码字节...),代码如下:
fo = open('myfile.txt, 'r')
for line in inFile:
Run Code Online (Sandbox Code Playgroud)
如何从文件中删除二进制数据.我有一个在每个二进制数据之前打印的标题(在这种情况下,它显示为数据块).例如,我的文件看起来像我要删除çºí?¼È×"ñdí:
myfile.txt文件:
ABCDEFGH
123456
Data Block 11
çºí?¼Èדñdí
XYZ123
Run Code Online (Sandbox Code Playgroud)
我想要的结果是myfile.txt看起来像这样:
ABCDEFGH
123456
Data Block 11
XYZ123
Run Code Online (Sandbox Code Playgroud)
这很困难,因为"二进制"blob 可能包含有效字符或字符序列.如果您使用的是使用多字节编码的"文本"文件,请忘记它.
如果您知道文件中的"text"只包含单字节字符,那么一种方法是以字节为单位读取文件,然后使用像
encode('ascii', error='ignore')
Run Code Online (Sandbox Code Playgroud)
这有效地从输出中删除了非ascii字符,但是如果你要在你的文件上执行此操作,你会得到:
ABCDEFGH 123456 Data Block ?d XYZ123
注意倒数第二行 - 在blob中找到有效的ascii字符并将其视为"text".
您可以从这样的解决方案开始,并对其进行微调(如果可能)以满足您的需求.也许斑点在线上自己出现,这样如果一条线有任何非ascii字符,就完全扔掉整条线.也许你可以看看blob并尝试了解它的一些结构.也许你只是满足于在那里随机排列部分字符并稍后以某种方式处理它们.那时它是特定于应用程序的.
这是我用来从您的示例输入生成输出的代码:
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='')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2270 次 |
| 最近记录: |