Heim  >  Artikel  >  Backend-Entwicklung  >  Wie optimiert man das Parsen von Dateien mit fester Breite in Python?

Wie optimiert man das Parsen von Dateien mit fester Breite in Python?

DDD
DDDOriginal
2024-10-31 05:26:30518Durchsuche

How to Optimize Fixed Width File Parsing in Python?

Optimieren des Parsens von Dateien mit fester Breite

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn