簡體   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