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