2016-09-21 1 views
-2

私は初心者で、.exeファイル、.classファイル、または.pycファイルを読み込み、英数字の割合(az、AZ 、0-9)。ここで私は(私はちょうど私がまだものをカウントするために見ていない、現時点では何かを特定することができるかどうかを確認しようとしている)今持っているものです。バイナリファイルの英数字をチェックする方法

chars_total = 0 
chars_alphnum = 0 
iterate = 1 

with open("pythonfile.pyc", "rb") as f: 
    byte = f.read(iterate) 
    while byte != b"": 

     chars_total += 1 
     print (byte) 

     iterate +=1 
     byte = f.read(iterate) 

このコードは、このような

b'\xe1WQ\x00' 
b'\x00\x00c\x00\x00' 
など様々なバイトを出力します

しかし、私はバイト自体を翻訳することに問題があります。

私はまた、すべてを英数字に変換するbinasciiをインポートした後にprint (binascii.hexlify(byte))を試しました。これは私が探しているものではないようです。だから私はちょうど重大に間違って何かを取得している、または私は少なくとも正しい軌道にいる?

完全に免責事項ですが、これは宿題の一部に関連していますが、クラス内の資料も読書もコーディングを全くカバーしていないため、このサイトを使用する許可があります。そして、はい、私はここに来る前にこれを理解しようとしています。

+4

あなたは本当に宿題をしなければなりません。 –

+2

1)ファイルを開きます。 2)その内容を読んでください。 3)バイトを反復処理します。 4)バイトが英数字かどうかを判断する。 5)カウントを保持する。 6)結果を表示します。これまでのところ、これらのステップを実行していないことがわかりました。具体的に何が問題になっているのかを示し、少なくとも試みたところにコードを表示してください。 –

+0

はい、これは宿題の一部です。上記の編集を参照してください。 –

答えて

0

あなたはASCII/UTF-8にそれをデコードすることはできない可能性があるため、任意のバイナリから読んでいる、あなたがWindows上で以下の

import string 
# create a set of the ascii code points for alphanumerics 
alphanumeric_codes = {ord(c) for c in string.ascii_letters + string.digits} 
file_bytes = b'...' 
alphanumerics = (b for b in file_bytes if b in alphanumeric_codes) 
percent_alphanumerics = 100.0 * len(alphanumerics)/len(filebytes) 
0

ような何かをしようとしたと仮定すると、あなたが使用することができますがシンプルなPowerShellスクリプトを使ってhexdump(ここではhttp://windowsitpro.com/powershell/get-hex-dumps-files-powershell)を取得し、Pythonで(ascii、unicode)どんな標準にでもデコードしてください(ここではhttps://docs.python.org/2/library/functions.html#chrを見てください)、英数字だけを残してください。

Linuxの場合、$ man hexdump端末上。

関連する問題