2016-12-24 1 views
-2

Ich habe eine Datei . Für mich scheint es eine binäre Datei zu sein. Dies ist eine Rohdatei, und ich glaube, dass sie die Aktieninformationen in OHLCV (Open, High, Low, Close, Volume) enthält. Außerdem kann es auch Text enthalten.Identifizieren Sie den Inhalt einer Datei über ein Programm in Python

Einer der Einträge, die ich möglicherweise für OHLCV haben könnte, ist

464.95, 468.3, 460, 465.65, 3957854 

Dies ist der Code, den ich versucht habe. Ich verstehe nicht vollständig über ASCII und 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) 

Mein Zweifel: Wie dekodiere ich diese Datei und mache daraus einen Sinn? Gibt es eine Möglichkeit für mich, diese Datei durch ein in Python geschriebenes Programm zu lesen und den Text von int/float zu trennen? Ich benutze Python 3 und Win 10 64 Bit.

+0

Freut mich zu hören, dass Sie Python 3 verwenden. –

Antwort

1

Sie möchten die Struktur einer Binärdatei mit Python zurückentwickeln. Da Sie angegeben haben, dass die Datei binär ist, kann es sich als schwierig erweisen. Sie müssen den Inhalt der Datei untersuchen und Ihre beste Intuition verwenden, um zu versuchen, die Struktur abzuleiten. Das erste, was Sie wollen, ist eine Möglichkeit, jedes der Bytes der Datei auf eine Weise anzuzeigen, die Ihnen hilft, die Bedeutung zu verstehen.

Glücklicherweise hat jemand bereits ein Werkzeug dafür geschrieben, hexdump. Installieren Sie das Paket mit pip.

Die Funktion, die Sie von diesem Paket benötigen, ist Hexdump, also importieren wir es in das Paket und holen Sie sich Hilfe zur Funktion.

>>> 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 

Jetzt können Sie beginnen, den Inhalt Ihrer Datei zu erkunden. Verwenden Sie den Slice-Operator, um es in Blöcken zu tun. Zum Beispiel, um den Inhalt des ersten 1 KBS der Datei zu machen:

>>> 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 hat eine schöne Eigenschaft, die Byte-Position Rendering, den Hex-Code, und dann (wenn möglich), um die druckbare Form des Zeichens auf das Recht.

Ich hoffe, dass einige Ihrer Textwerte dort sichtbar sind und Ihnen Hinweise geben, wie Sie Ihre Datei zurückentwickeln können.

Sobald Sie begonnen haben zu bestimmen, wie Ihre Datei strukturiert ist, können Sie die verschiedenen String-Operatoren verwenden, um Ihre Daten zu bearbeiten. Zum Beispiel, wenn Sie feststellen, dass Ihre Datei in einzelnen Abschnitte durch den Null-Byte aufgeteilt wird (b'\x00'), können Sie diese Abschnitte erhalten somit:

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

Es gibt eine Menge Dinge, die Sie wahrscheinlich müssen lernen, während Sie tiefer graben, wie Zeichenkodierungen, Zahlencodierungen (einschließlich Little-Endian für Ganzzahlen und Fließkomma-Codierung für Fließkommazahlen). Sie möchten einen Weg finden, Ihre Ergebnisse extern zu validieren.

Viel Glück.

Verwandte Themen