Um Dateien mit fester Breite effizient zu parsen, kann man erwägen, das Strukturmodul von Python zu nutzen. Dieser Ansatz nutzt C für eine verbesserte Geschwindigkeit, wie im folgenden Beispiel gezeigt:
<code class="python">import struct fieldwidths = (2, -10, 24) fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's') for fw in fieldwidths) unpack = struct.Struct(fmtstring).unpack_from # Alias. parse = lambda line: tuple(s.decode() for s in unpack(line.encode())) line = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n' fields = parse(line) print('fields: {}'.format(fields))</code>
Alternativ kann String-Slicing eingesetzt werden. Um die Effizienz zu steigern, sollten Sie erwägen, eine Lambda-Funktion zu definieren, die Slices zur Laufzeit kompiliert, wie in der folgenden optimierten Version zu sehen:
<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>
Das obige ist der detaillierte Inhalt vonWie optimiert man das Parsen von Dateien mit fester Breite in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!