xporteren is die binêre lêer formaat wat gebruik word deur 'n klomp van die Verenigde State van Amerika regering agentskappe vir die publikasie van data stelle & nbsp;. Dit het 'n baie sin as jy probeer data lêers terug in 1988 lees op jou IBM hoofraam.
Hoe kan ek dit gebruik?
Kom ons maak hierdie kort en kragtig:
invoer xporteren
met xport.XportReader (xport_file) as leser:
& Nbsp; vir ry in die leser:
& Nbsp; gedrukte ry
Elke ry sal 'n dict met 'n sleutel vir elke veld in die dataset wees. Waardes sal óf 'n unicode string, 'n float of 'n int wees, afhangende van die tipe wat in die lêer vir die gebied.
Aan lêer inligting
Sodra jy het 'n XportReader voorwerp, is daar 'n paar eienskappe en metodes wat gee jou besonderhede oor die lêer:
- Reader.file: die onderliggende Python lêer voorwerp (sien volgende afdeling).
- Reader.record_start: die posisie (in grepe) in die lêer waar rekords begin (sien volgende afdeling).
& Nbsp; reader.record_length: die lengte (in grepe) van elke rekord (sien volgende afdeling).
- Reader.record_count (): aantal rekords in die lêer. (Waarskuwing: hierdie sal probeer om die einde van die lêer lêer lengte te bepaal.)
- Reader.file_info en reader.member_info: dicts wat inligting bevat oor wanneer en hoe die dataset geskep is.
- Reader.fields: lys van velde in die dataset. Elke veld is 'n dict wat die volgende sleutels, kopieer van die spec:
& Nbsp; struct NAMESTR {
& Nbsp; kort ntype; / * VERANDERLIKE TIPE: 1 = NUMERIC, 2 = CHAR * /
& Nbsp; kort nhfun; / * HASH VAN NNAME (altyd 0) * /
& Nbsp; * kort field_length; / * LENGTE VAN veranderlike in OBSERVATION * /
& Nbsp; kort nvar0; / * VARNUM * /
& Nbsp; * CHAR8 naam; / * Naam veranderlike * /
& Nbsp; * char40 etiket; / * ETIKET veranderlike * /
& Nbsp; CHAR8 nform; / * Naam van FORMAAT * /
& Nbsp; kort NFL; / * FORMAAT FIELD lengte of 0 * /
& Nbsp; * kort num_decimals; / * FORMAAT aantal desimale * /
& Nbsp; kort nfj; / * 0 = left regverdiging, 1 = regs net * /
& Nbsp; char nfill [2]; / * (Ongebruikte, VIR belyning en toekoms) * /
& Nbsp; CHAR8 niform; / * Naam van Inleesformaat * /
& Nbsp; kort nifl; / * INFORMASIE LENGTE KENMERK * /
& Nbsp; kort nifd; / * INFORMASIE aantal desimale * /
& Nbsp; n lang OSW's; / * Posisie met waarde in Waarneming * /
& Nbsp; char res [52]; / * Oorblywende velde is irrelevant * /
& Nbsp;};
& nbsp; NOTA: items met sterre is herdoop na die kort name gegee word in die spec. Aangesien dit 'n alfa weergawe, kan ander items herdoop word in die toekoms, as iemand my vertel wat hulle is vir.
Random toegang tot rekords
As jy wil spesifieke rekords om toegang te verkry, in plaas van iterating, kan jy gebruik Python se standaard lêer toegang funksies en 'n bietjie wiskunde.
Kry 1000 rekord:
reader.file.seek (reader.record_start + reader.record_length * 1000, 0)
reader.next ()
Kry rekord voor mees onlangse een vergesog:
reader.file.seek (-reader.record_length * 2, 1)
reader.next ()
Kry laaste rekord:
reader.file.seek (reader.record_start + reader.record_length * (reader.record_count () - 1), 0)
reader.next ()
(In hierdie laaste voorbeeld, kennis dat ons nie kan soek by die einde van die lêer nie, want daar kan wees padding grepe. Goeie ou vaste wydte binêre lêer formate.)
Los / steel hierdie kode!
Ek het dit op omdat dit gelyk belaglik dat daar was nie 'n maklike manier om 'n standaard regering data formaat in die meeste programmeertale te lees. Ek kan gekry het dinge verkeerd. As jy 'n lêer wat nie eiendom, wat ontsyfer, stuur 'n trek versoek. Die amptelike spec is hier. Dit is verbasend eenvoudig vir 'n binêre lêer formaat van die 80's.
Voel asseblief vry om hierdie kode te gebruik as 'n basis om jou eie biblioteek vir jou gunsteling programmeertaal te skryf. . Die regering data moet toeganklik wees, man
Vereistes :
- Python
Kommentaar nie gevind