Effizientes Parsen von Dateien mit fester Breite
Dateien mit fester Breite stellen aufgrund ihrer starren Struktur eine Herausforderung beim Parsen dar. Um dieses Problem zu lösen, können mehrere Ansätze zum effizienten Extrahieren von Daten aus solchen Dateien eingesetzt werden.
Verwendung des Strukturmoduls
Das Strukturmodul der Python-Standardbibliothek bietet eine prägnante und schnelle Lösung Lösung zum Parsen von Linien mit fester Breite. Es ermöglicht vordefinierte Feldbreiten und Datentypen und ist somit eine geeignete Option für große Datensätze. Das folgende Code-Snippet zeigt, wie struct für diesen Zweck verwendet wird:
<code class="python">import struct fieldwidths = (2, -10, 24) fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's') for fw in fieldwidths) # Convert Unicode input to bytes and the result back to Unicode string. unpack = struct.Struct(fmtstring).unpack_from # Alias. parse = lambda line: tuple(s.decode() for s in unpack(line.encode())) print('fmtstring: {!r}, record size: {} chars'.format(fmtstring, struct.calcsize(fmtstring))) line = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n' fields = parse(line) print('fields: {}'.format(fields))</code>
String-Slicing mit Optimierung zur Kompilierungszeit
String-Slicing ist eine weitere praktikable Methode zum Parsen von Fehlern width-Dateien. Obwohl zunächst weniger effizient, kann eine Technik namens „Kompilierungszeitoptimierung“ die Leistung erheblich verbessern. Der folgende Code implementiert diese Optimierung:
<code class="python">def make_parser(fieldwidths): cuts = tuple(cut for cut in accumulate(abs(fw) for fw in fieldwidths)) pads = tuple(fw < 0 for fw in fieldwidths) # bool flags for padding fields flds = tuple(zip_longest(pads, (0,)+cuts, cuts))[:-1] # ignore final one slcs = ', '.join('line[{}:{}]'.format(i, j) for pad, i, j in flds if not pad) parse = eval('lambda line: ({})\n'.format(slcs)) # Create and compile source code. # Optional informational function attributes. parse.size = sum(abs(fw) for fw in fieldwidths) parse.fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's') for fw in fieldwidths) return parse</code>
Dieser optimierte Ansatz bietet sowohl Effizienz als auch Lesbarkeit für das Parsen von Dateien mit fester Breite.
Das obige ist der detaillierte Inhalt vonWie kann ich Dateien mit fester Breite in Python effizient analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!