xportați este formatul de fișier binar folosit de o grămadă de Statele Unite ale Americii agenții guvernamentale pentru publicarea seturi de date. & Nbsp; Ea a făcut o mulțime de sens dacă ați încercat să citească fișierele de date de pe mainframe IBM înapoi în 1988.
Cum se utilizează?
Să facem acest scurt și dulce:
xportați import
cu xport.XportReader (xport_file) ca cititor:
& Nbsp; de rând în cititor:
& Nbsp; rând imprimare
Fiecare rând va fi un dict cu o cheie pentru fiecare domeniu în setul de date. Valorile vor fi fie un șir Unicode, un float sau un int, în funcție de tipul specificat în fișierul de acel câmp.
Noțiuni de bază de informatii a fișier
Odată ce aveți un obiect XportReader, există câteva proprietăți și metode care vă va oferi detalii despre fisierul:
- Reader.file: stă la baza obiectului fișier Python (a se vedea secțiunea următoare).
- Reader.record_start: poziția (în bytes) în dosarul în care înregistrările începe (a se vedea secțiunea următoare).
& Nbsp; reader.record_length: lungimea (în bytes) a fiecărei înregistrări (vezi secțiunea următoare).
- Reader.record_count (): numărul de înregistrări din fișier. (Atenție: acest lucru va căuta la sfârșitul fișierului pentru a determina lungimea fișier.)
- Reader.file_info și reader.member_info: face previziuni cum conțin informații despre când și cum a fost creat setul de date.
- Reader.fields: lista de câmpuri în setul de date. Fiecare câmp este un dict conține următoarele taste, copiate de la spec:
& Nbsp; struct NAMESTR {
& Nbsp; ntype scurt; / * Tipul variabilei: 1 = NUMERIC, 2 = CHAR * /
& Nbsp; nhfun scurt; / * Hash NNAME (întotdeauna 0) * /
& Nbsp; * field_length scurt; / * LUNGIME variabilei în observarea * /
& Nbsp; nvar0 scurt; / * Varnum * /
& Nbsp; * Numele char8; / * NUMELE VARIABLE * /
& Nbsp; * etichetă char40; / * ETICHETA ale variabilei * /
& Nbsp; char8 nform; / * NUMELE FORMAT * /
& Nbsp; scurt NFL; / * LUNGIME FORMAT câmpului sau 0 * /
& Nbsp; * num_decimals scurte; / * NUMĂR FORMATUL de zecimale * /
& Nbsp; NFJ scurt; / * 0 = JUSTIFICARE stânga, 1 = RIGHT JUST * /
& Nbsp; char nfill [2]; / * (UNUSED, pentru alinierea și viitoare) * /
& Nbsp; char8 niform; / * NUMELE INTRARE FORMAT * /
& Nbsp; scurt nifl; / * INFORMAT LUNGIMEA ATTRIBUTE * /
& Nbsp; scurt nifd; / * NUMĂR INFORMAT de zecimale * /
& Nbsp; ONP lungi; / * POZIȚIA VALOARE în observarea * /
& Nbsp; odihnă char [52]; / * Câmpuri rămase sunt irelevante * /
& Nbsp;};
& nbsp; NOTA: articole cu stele au fost redenumite din numele scurte date în spec. Deoarece aceasta este o versiune alfa, alte articole pot fi redenumit în viitor, în cazul în care cineva mi-a spus ceea ce sunt pentru.
Acces aleator la înregistrări
Dacă doriți să accesați înregistrări specifice, în loc de iterarea, puteți folosi funcțiile de acces la fișier standard de Python și un pic de matematica.
Ia înregistrare 1000th:
reader.file.seek (reader.record_start + reader.record_length * 1000, 0)
reader.next ()
Ia înregistrare înainte cele mai recente una exagerată:
reader.file.seek (-reader.record_length * 2, 1)
reader.next ()
Ia Ultima înregistrare:
reader.file.seek (reader.record_start + reader.record_length * (reader.record_count () - 1), 0)
reader.next ()
(În acest ultim exemplu, rețineți că nu putem căuta la sfârșitul fișierului, deoarece pot exista bytes padding. Bine-lățime fixă formate de vechi fișier binar.)
Vă rugăm să corectați / fura acest cod!
Am scris asta pentru că se pare ridicol că nu a existat nici o modalitate ușoară de a citi un format de date guvern standard, în cele mai multe limbaje de programare. Poate că am ajuns lucrurile greșit. Dacă găsiți un fișier care nu decodeaza propery, trimite o cerere de tragere. Spec oficial este aici. Este surprinzător simplu pentru un format de fișier binar din anii '80.
Vă rugăm să nu ezitați să utilizați acest cod ca o bază pentru a scrie propria biblioteca pentru limba dvs. de programare preferat. . Datele guvernamentale trebuie să fie accesibile, omule
Cerințe :
- Python
Comentariile nu a fost găsit