So wie das Modul aus der Standardbibliothek?jerch hat geschrieben:z.B. kleiner CSV-Importer in C geschrieben
Datenbank für 9GB Text
Hier noch eine Variante mit einem regulären Ausdruck:rman hat geschrieben:@snafu: danke für den Tipp, habe es gerade implementiert. Hat die Einlesezeit um 15% verkürzt.
Code: Alles auswählen
import re
def get_rows_in_range(csvfile, uid_range):
uid_range = str(uid_range)
match_pattern = re.compile('(.*?,){5}').match
for line in csvfile:
uid = match_pattern(line).group(1)
if uid.startswith(uid_range):
yield line.strip().split(',')
Die Zahl in der geschweiften Klammer beim Pattern ist (zumindest in diesem Kontext) die Angabe der Spalte (Zählung beginnt bei 1). Das spätere ``.group(1)`` hat nichts damit zu tun, sondern das bezieht sich auf den regulären Ausdruck. Zu beachten ist, dass ich das Komma als Spaltentrenner mit ins Ergebnis genommen habe. Da ja eh mit ``.startswith()`` gearbeitet wird, wollte ich den regulären Ausdruck möglichst einfach halten und habe deshalb keine Sonderbehandlung fürs fünfte Komma mit eingebaut.
Ich bin gespannt, was deine Messungen ergeben...
@jerch: Naja, aber dann ist man doch schon direkt bei C-Programmierung. Wozu dann überhaupt Python.