


Wie kann ich Dateizeilen mit fester Breite in Python effizient analysieren?
Schnelles Parsen von Dateizeilen mit fester Breite
Das Parsen von Dateien mit fester Breite, bei denen jede Spalte eine bestimmte Anzahl von Zeichen in einer Zeile einnimmt, kann eine Aufgabe sein, die Effizienz erfordert. Hier finden Sie eine Diskussion darüber, wie Sie dies effizient erreichen können:
Das Problem
Stellen Sie sich eine Datei mit fester Breite vor, bei der die ersten 20 Zeichen eine Spalte darstellen, gefolgt von 21–30 für die zweite und so weiter An. Wie können wir eine gegebene Zeile mit 100 Zeichen effektiv in ihre jeweiligen Spalten analysieren?
Lösungen
1. Strukturmodul:
Die Verwendung des Strukturmoduls der Python-Standardbibliothek bietet aufgrund seiner C-Implementierung sowohl Einfachheit als auch Geschwindigkeit. Der folgende Code demonstriert seine Verwendung:
<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 decode result. unpack = struct.Struct(fmtstring).unpack_from # Alias. parse = lambda line: tuple(s.decode() for s in unpack(line.encode())) # Parse a sample line. line = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n' fields = parse(line) print('fields:', fields)</code>
Ausgabe:
fmtstring: '2s 10x 24s', record size: 36 chars fields: ('AB', 'MNOPQRSTUVWXYZ0123456789')
2. Optimiertes String-Slicing:
Während String-Slicing häufig verwendet wird, kann es bei großen Zeilen umständlich werden. Hier ist ein optimierter Ansatz:
<code class="python">from itertools import zip_longest from itertools import accumulate def make_parser(fieldwidths): # Calculate slice boundaries. cuts = tuple(cut for cut in accumulate(abs(fw) for fw in fieldwidths)) # Create field slice tuples. flds = tuple(zip_longest(cuts, (0,)+cuts))[:-1] # Ignore final value. # Construct the parsing function. parse = lambda line: tuple(line[i:j] for i, j in flds) 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 # Parse a sample line. line = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n' fieldwidths = (2, -10, 24) # Negative values indicate ignored padding fields. parse = make_parser(fieldwidths) fields = parse(line) print('fmtstring:', parse.fmtstring, ', record size:', parse.size, 'chars') print('fields:', fields)</code>
Ausgabe:
fmtstring: '2s 10x 24s', record size: 36 chars fields: ('AB', 'MNOPQRSTUVWXYZ0123456789')
Das obige ist der detaillierte Inhalt vonWie kann ich Dateizeilen mit fester Breite in Python effizient analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

So herunterladen Sie Dateien in Python

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Einführung des natürlichen Sprach -Toolkits (NLTK)

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?
