Ich habe eine binäre Datei mit folgendem Format:Lesen von Daten aus Binärdatei Python
und ich verwende diesen Code um es zu öffnen:
import numpy as np
f = open("author_1", "r")
dt = np.dtype({'names': ['au_id','len_au_name','au_name','nu_of_publ', 'pub_id', 'len_of_pub_id','pub_title','num_auth','len_au_name_1', 'au_name1','len_au_name_2', 'au_name2','len_au_name_3', 'au_name3','year_publ','num_of_cit','citid','len_cit_tit','cit_tit', 'num_of_au_cit','len_cit_au_name_1','au_cit_name_1', len_cit_au_name_2',
'au_cit_name_2','len_cit_au_name_3','au_cit_name_3','len_cit_au_name_4',
'au_cit_name_4', 'len_cit_au_name_5','au_cit_name_5','year_cit'],
'formats': [int,int,'S13',int,int,int,'S61', int,int,'S8',int,'S7',int,'S12',int,int,int,int,'S50',int,int,
'S7',int,'S7',int,'S9',int,'S8',int,'S1',int]})
a = np.fromfile(f, dtype=dt, count=-1, sep="")
Und ich nehme dies:
array([ (1, 13, b'Scott Shenker', 200, 1, 61, b'Integrated services in the internet architecture: an overview', 3, 8, b'R Braden', 7, b'D Clark', 12, b'S Shenker\xe2\x80\xa6', 1994, 1000, 401, 50, b'[HTML] An architecture for differentiated services', 5, 7, b'D Black', 7, b'S Blake', 9, b'M Carlson', 8, b'E Davies', 1, b'Z', 1998),
(402, 72, b'Resource rese', 1952544370, 544108393, 1953460848, b'ocol (RSVP)--Version 1 functional specification\x05\x00\x00\x00\x08\x00\x00\x00R Brad', 487013, 541851648, b'Zhang\x08', 1109414656, b'erson\x08', 542310400, b'Herzog\x07\x00\x00\x00S ', 1768776010, 511342, 103168, 22016, b'\x00A reliable multicast framework for light-weight s', 1769173861, 544435823, b'and app', 1633905004, b'tion le', 543974774, b'framing\x04', 458752, b'\x00\x00S Floy', 2660, b'', 1632247894),
Eine Idee, wie die ganze Datei geöffnet werden kann?
Zur Klarstellung: Sie wissen, wie der erste Datensatz aus der Datei zu lesen und Sie wollen in der Lage sein zu lesen alle Aufzeichnungen? –
Verwenden Sie stattdessen Pythons Standardmethoden zum Lesen von Dateien und das Modul 'struct'. – Phillip
Beachten Sie, dass Sie zum Lesen des dritten Elements (Autorenname) und * alles darüber hinaus * das zweite Element lesen und diese Länge dynamisch verwenden müssen. Momentan hast du es fest programmiert, was sehr schlecht ist - du wirst einen komplizierteren dynamischen Reader erstellen müssen, nur die Verwendung von numpy wird niemals funktionieren. – Ajean