2016-12-24 7 views
-2

私はファイルhereを持っています。私にとってはバイナリファイルだと思われます。これは生ファイルであり、私はOHLCV(オープン、ハイ、ロー、クローズ、ボリューム)の株価情報を持っていると信じています。それに加えて何らかのテキストがあるかもしれません。私はおそらくOHLCVを持っている可能性がエントリのpythonでプログラムを使ってファイルの内容を確認する

一つは、これは私がしようとしたコードである

464.95, 468.3, 460, 465.65, 3957854 

です。私はASCIIとUnicodeについて完全に理解していません。

input_file = "00063181.dat" # tata motors 
with open(input_file, "rb") as fh: 
    buf = fh.read() 
output_l = list(map(int , buf)) 
print (output_l) 

マイ・ダウト:このファイルをどのようにデコードして理解できますか? Pythonで書かれたプログラムを使ってこのファイルを読んでint/floatからテキストを分離する方法はありますか?私はPython 3とWin 10 64ビットを使用しています。

+0

あなたがPython 3を使用していると聞いてうれしいです。 –

答えて

1

Pythonを使用してバイナリファイルの構造をリバースエンジニアリングしようとしています。ファイルがバイナリであると宣言しているので、それは難しいかもしれません。あなたは、ファイルの内容を調べ、構造を推測しようとするために、あなたの最高の直感を使用する必要があります。最初に望むことは、ファイルの各バイトを意味を理解するのに役立つ方法で表示する方法です。

幸いにも、誰かがこれを行うためのツールをすでに書いています。hexdump pipを使ってそのパッケージをインストールしてください。

このパッケージから必要な機能は、hexdumpです。パッケージをインポートして機能に関するヘルプを取得しましょう。

>>> import hexdump 
>>> help(hexdump.hexdump) 
Help on function hexdump in module hexdump: 

hexdump(data, result='print') 
    Transform binary data to the hex dump text format: 

    00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 

     [x] data argument as a binary string 
     [x] data argument as a file like object 

    Returns result depending on the `result` argument: 
     'print'  - prints line by line 
     'return' - returns single string 
     'generator' - returns generator that produces lines 

これで、ファイルの内容を調べることができます。スライス演算子を使用してチャンクで行います。

>>> hexdump.hexdump(buf[:1024]) 
00000000: C3 8E C2 8F 22 13 C2 AA 66 2A 22 47 C3 94 C3 AA ...."...f*"G.... 
00000010: C3 89 C3 A0 C3 B1 C3 91 6A C2 A4 C3 BF 3C C2 AA ........j....<.. 
00000020: C2 91 73 C3 85 46 57 47 C2 88 C3 99 C2 B6 3E 2D ..s..FWG......>- 
00000030: C3 BA 69 10 C2 93 C3 94 38 C3 81 7A 6A 43 30 7C ..i.....8..zjC0| 
00000040: C3 BB C2 AA 01 2D C2 97 C3 83 C3 88 64 14 C3 9C .....-......d... 
00000050: C2 AB C2 AA C3 A2 74 C2 85 5D C3 97 4E 64 68 C3 ......t..]..Ndh. 
... 
000003C0: 42 C2 8F 06 7F 12 33 7F 79 1E 2C 2A 0F C3 92 36 B.....3.y.,*...6 
000003D0: C3 A6 C2 96 C2 93 C2 8B 43 C2 9F 4C C2 95 48 24 ........C..L..H$ 
000003E0: C2 B3 C2 82 26 C3 88 C3 BD C3 96 12 1E 5E 18 2E ....&........^.. 
000003F0: 37 C3 A7 C2 87 C3 AE 00 4F 3F C2 9C C3 A8 1C C2 7.......O?...... 

hexdumpに対してはバイト位置、進コード、その後、(可能ならば)文字の印刷可能な形式でのレンダリングの素敵な性質を持っている:たとえば、あなたのファイルの最初の1キロバイトの内容をレンダリングします権利。

うまくいけば、テキスト値の一部がそこに表示され、ファイルをリバースエンジニアリングする手掛かりが得られることを願っています。

ファイルの構造の決定を開始したら、さまざまな文字列演算子を使用してデータを操作できます。あなたは、ファイルがNULLバイト(b'\x00')でのセクションに分割されていることを発見した場合たとえば、あなたは、このようにこれらのセクションを取得することができます:

>>> sections = buf.split(b'\x00') 

あなたが学ばなければならない可能性が高いです、物事がたくさんあります文字エンコーディング、数値エンコーディング(整数のリトルエンディアン、浮動小数点数の浮動小数点エンコーディングなど)のように、深く掘り下げていってみましょう。あなたは結果を外部から検証する方法を探したいでしょう。

幸運のベスト。

関連する問題