私はPython 2からPython 3に私のpythonアプリケーションの変換を行っています。私が使用する関数の1つは、バイナリファイルから印刷可能な文字を取得することです。私は以前のpython 2に次の関数を使用し、それは素晴らしい仕事:印刷可能なcharctersのみをバイナリファイル(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と上記のコードを実行すると、それは私のために絶対に大丈夫です、このような出力を生成します
+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:
を置き換えることによって 'STR' から 'int型' に変換しました私は、Python 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氏の答えに書かれた説明と説明を提示するように要請します。表示されている場合、私はこの投稿/質問を削除します。 –