xporteren is het binaire bestandsformaat gebruikt door een bos van Verenigde Staten overheidsinstellingen voor het publiceren van data sets & nbsp;. Het maakte veel zin als je probeert om data-bestanden te lezen op uw IBM-mainframe terug in 1988.
Hoe gebruik ik het?
Laten we dit kort en krachtig:
import xporteren
met xport.XportReader (xport_file) als lezer:
& Nbsp; voor de rij in de lezer:
& Nbsp; druk rij
Elke rij wordt een dict met een sleutel voor elk veld in de dataset. Waarden ofwel een Unicodestring, een vlotter of int, afhankelijk van het type in het bestand voor dat veld.
Getting file info
Zodra u een XportReader voorwerp hebben, zijn er een paar eigenschappen en methoden die u informatie over het bestand zal geven:
- Reader.file: de onderliggende Python bestand object (zie volgende paragraaf).
- Reader.record_start: de positie (in bytes) in het bestand met gegevens te starten (zie volgende paragraaf).
& Nbsp; reader.record_length: de lengte (in bytes) van elk record (zie volgende paragraaf).
- Reader.record_count (): aantal records in het bestand. (Waarschuwing: deze zal trachten het einde van het bestand naar bestand lengte te bepalen.)
- Reader.file_info en reader.member_info: dicts met informatie over wanneer en hoe de dataset is gemaakt.
- Reader.fields: lijst van de velden in de dataset. Elk veld is een dict bevat de volgende toetsen, gekopieerd van de spec:
& Nbsp; struct NAMESTR {
& Nbsp; korte Ntype; / * VARIABELE TYPE: 1 = numeriek, 2 = CHAR * /
& Nbsp; korte nhfun; / * Hash van nname (altijd 0) * /
& Nbsp; * korte field_length; / * DUUR VAN variabele OBSERVATION * /
& Nbsp; korte nvar0; / * VARNUM * /
& Nbsp; * char8 naam; / * NAAM VAN VARIABELE * /
& Nbsp; * char40 label; / * LABEL VAN VARIABELE * /
& Nbsp; char8 Nform; / * NAAM VAN FORMAAT * /
& Nbsp; korte nfl; / * FORMAT veldlengte OF 0 * /
& Nbsp; * korte num_decimals; / * FORMAT aantal decimalen * /
& Nbsp; korte NFJ; / * 0 = LINKS MOTIVERING, 1 = RECHTS JUST * /
& Nbsp; char nfill [2]; / * (NIET, voor het uitlijnen en toekomstige) * /
& Nbsp; char8 niform; / * NAAM VAN INPUT FORMAT * /
& Nbsp; korte nifl; / * INFORMAT LENGTE ATTRIBUUT * /
& Nbsp; korte nifd; / * INFORMAT aantal decimalen * /
& Nbsp; lange NPO; / * POSITIE VAN WAARDE IN OBSERVATION * /
& Nbsp; char rust [52]; / * Overige velden zijn niet relevant * /
& Nbsp;};
& nbsp; NB: items met sterren zijn hernoemd van de korte namen die in de spec. Aangezien dit is een alpha release, kan andere punten worden omgedoopt in de toekomst, als iemand me vertelt wat ze voor.
Random toegang tot documenten
Wilt u toegang tot specifieke records, in plaats van iteratie, kunt u standaard toegang tot bestanden functies Python's en een beetje wiskunde gebruiken.
Krijg 1000ste opnemen:
reader.file.seek (reader.record_start + reader.record_length * 1000, 0)
reader.next ()
Krijg opnemen voordat meest recente vergezocht:
reader.file.seek (-reader.record_length * 2, 1)
reader.next ()
Krijg laatste record:
reader.file.seek (reader.record_start + reader.record_length * (reader.record_count () - 1), 0)
reader.next ()
(In dit laatste voorbeeld, er rekening mee dat we niet kunnen winnen bij het einde van het bestand, want er kunnen padding bytes. Goede oude vaste breedte binaire bestandsformaten.)
Let fix / stelen deze code!
Ik schreef dit omdat het leek belachelijk dat er geen eenvoudige manier om een standaard data regering-formaat in de meeste programmeertalen lezen. Ik kan hebben gekregen dingen mis. Als u een bestand dat niet decoderen propery vinden, stuur dan een pull aanvraag. De officiële spec is hier. Het is verrassend eenvoudig voor een binair bestandsformaat uit de jaren '80.
Gelieve ook te voelen vrij om deze code te gebruiken als basis om uw eigen bibliotheek te schrijven voor uw favoriete programmeertaal. . Overheidsgegevens moet toegankelijk zijn, man
Eisen
- Python
Reacties niet gevonden