2012-04-25 32 views
-1

Pythonでは、バイナリファイル(ここでは.chnファイルを読み込む必要があります)を読み込み、バイナリ形式で結果を表示するにはどうすればよいですか?Pythonでバイナリファイル(.chn)を読む

+2

"バイナリ形式"とは何でしょうか? – Amber

+0

バイナリ形式:0000000 1111111、それを16進数に変換します – Smith

+0

値はスペースで区切られていますか? – rubik

答えて

2

値はスペースで区切られていることを仮定すると:Pythonで

with open('myfile.chn', 'rb') as f: 
    data = [] 
    for line in f: # a file supports direct iteration 
     data.extend(hex(int(x, 2)) for x in line.split()) 

file()open()を使用することをお勧めし、ドキュメントが明示的に述べている:

When opening a file, it’s preferable to use open() instead of invoking the file constructor directly.

rbモードが開きますバイナリモードのファイル。

参考:

with open('myfile.chn') as f: 
     data=f.read() 
     data=[bin(ord(x)).strip('0b') for x in data] 
     print ''.join(data) 

を、あなたがバイナリデータのみが必要な場合は、それがリストになります。
http://docs.python.org/library/functions.html#open

+0

+1:ファイルをバイナリモードで開く場合。 Nitpick:私はbinascii.hexlifyを使用したでしょう。 – mirk

+0

エラーがあります:基数2のint()の無効なリテラル:b '\ xff \ xff \ x01 \ x00 \ x01 \ x0056I \ xecO \ x00 \ xcc/K \ x0018MAR11' – Smith

+0

@mirk:はい、それは良い考えです。私はできるだけ早く編集します。 – rubik

0
with file('myfile.chn') as f: 
    data = f.read() # read all strings at once and return as a list of strings 
    data = [hex(int(x, 2)) for x in data] # convert to a list of hex strings (by interim getting the decimal value) 
2

はこれを試してみてください。

with open('myfile.chn') as f: 
     data=f.read() 
     data=[bin(ord(x)).strip('0b') for x in data] 
     print data 

データには、2進数のリストがあります。あなたはこれを取って16進数に変換することができます

+0

それはエラーがあります:グローバル名 'a'は定義されていません – Smith

+0

それは 'a'ではないそれは 'データ'です。今私は今それを確認して編集しました – Myjab

+0

おかげでたくさんのおい人 – Smith

関連する問題