我正在从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先生”的回答方式显示文件和解释。如果显示,我将删除此帖子/问题。 –