Datenbank für 9GB Text

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

jerch hat geschrieben:z.B. kleiner CSV-Importer in C geschrieben
So wie das Modul aus der Standardbibliothek?
Das Leben ist wie ein Tennisball.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@EyDu:
Nicht ganz, eben ohne Pythoninterpreter als "Kleber" zwischen csv und sqlite.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

rman hat geschrieben:@snafu: danke für den Tipp, habe es gerade implementiert. Hat die Einlesezeit um 15% verkürzt.
Hier noch eine Variante mit einem regulären Ausdruck:

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(',')
Ich habe aber schon oft die Erfahrung gemacht, das die Nutzung von Python-Builtins bei String-Operationen schneller ist als die Regex-Engine. Müsstest du mal ausprobieren, ob das die ``.split(',', 5)``-Variante noch schlagen kann.

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...
BlackJack

@jerch: Naja, aber dann ist man doch schon direkt bei C-Programmierung. Wozu dann überhaupt Python. :-)
Antworten