我正在從python 2開始將python應用程序轉換爲python 3.我使用的其中一個功能是從二進制文件中獲取可打印字符。我剛纔用下面的python 2的功能和它的偉大工作:如何在二進制文件中打印可打印字符(等價於Linux下的字符串)?
import string
def strings(filename, min=4):
with open(filename, "rb") as f:
result = ""
for c in f.read():
if c in string.printable:
result += c
continue
if len(result) >= min:
yield result
result = ""
if len(result) >= min: # catch result at EOF
yield result
代碼實際上是從Python equivalent of unix "strings" utility。當我運行與Python 2它產生的輸出這樣上面的代碼是絕對OK對我來說:
+s
^!1^
i*Q(
}"~
%lh!ghY
#dh!
!`,!
mL#H
o!<XXT0
' <
z !Uk
%
wS
n` !wl
*ty
(Q 6
!XPLO$
E#kF
然而,函數給出的python 3.奇怪的結果它產生錯誤:
TypeError: 'in <string>' requires string as left operand, not int
所以我由與此
更換此if c in string.printable:
轉換的 'INT' 到 'STR'
(I也被轉換,其中相同的錯誤消息被拋出的所有地方)
現在蟒3給出以下輸出:
56700
0000000000000000000000000000000000000000
1236
60000
400234
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2340
0000
5010
5000
17889
2348
23400000000
5600
我不能看到任何字符時我使用Python 3。讚賞獲得代碼工作或指向解決方案的任何幫助。我所需要的只是從二進制文件中提取字符串(非常小,幾kb),並將其存儲在一個變量中。
您在python3中有字節。使用'set(string.printable.encode())' –
我不知道誰投下了這個問題。但是我要求他們以「Martijn Pieters先生」的回答方式顯示文件和解釋。如果顯示,我將刪除此帖子/問題。 –