Frage

Ich habe ein tab-delimited txt file mit Zeilen, die durch Registerkarten getrennt sind und die Zeilen durch Neuleitungen getrennt sind. So sieht es tatsächlich aus:

476502291\t\tLF3139812164\t\tTitle 1\tKids & Family\nGRAV_2011\t\tThe Full Picture\tIndependent\n [...etc...]

Beachten Sie, dass die Werte manchmal durch zwei Registerkarten statt eines getrennt werden.

Ich muss dies in eine MySQL -Tabelle einfügen, die zu Folgendem führen sollte:

ID             title               genre
476502291      Title 1             Kids & Family
GRAV_2011      The Full Picture    Independent

Wie würde ich eine tabend getrennte TXT-Datei lesen und a ausführen for Schleife um Werte in eine Tabelle mit dem Namen einzulegen vendor Verwenden Sie MySQLDB?

>>> import MySQLdb
>>> conn = MySQLdb.connect (host = "localhost",
                             user = "me",
                             passwd = "password",
                             db = "my-db")
>>> cursor = conn.cursor ()
>>> # for loop  # how to read from the txt file to insert it as required?
>>>     # cursor.execute (INSERT...)
>>> conn.commit()
>>> conn.close()
War es hilfreich?

Lösung

Schritt 1. Lesen Sie die csv Modul. http://docs.python.org/library/csv.html. Das tut, was du willst.

with open('your_data_file.dat','r') as source:
    rdr= csv.reader( source, delimiter='\t', quotechar='')
    for row in rdr:
        # you have your columns with which to do your insert.
conn.commit()

Schritt 2. Lesen Sie auch Kontextmanager.

from contextlib import closing

with open('your_data_file.dat','r') as source:
    rdr= csv.reader( source, delimiter='\t', quotechar='')
    with closing(conn.cursor()) as cursor:
        for row in rdr:
            # you have your columns with which to do your insert.
conn.commit()

Dies wird sicherstellen, dass Cursor und Dateien ordnungsgemäß geschlossen sind.

Andere Tipps

Solange Registerkarten nur als Abgrenzer in Ihrer Datei verwendet werden, sollten Sie in der Lage sein, so etwas zu tun:

import re

# connect to MySQLdb

with open(file_name) as f:
    for line in f:
        id, title, genre = re.split(r'\t+', line)
        # execute INSERT statement

Die Idee ist, dass Sie immer zwei Gruppen von Registerkarten haben, einen zwischen ID und Titel und dem anderen zwischen Titel und Genre. Durch die Nutzung re.split() an \t+ (Eine oder mehrere Registerkarten) Sie erhalten eine Liste mit Länge 3 mit den Feldern, an denen Sie interessiert sind.

Wenn Sie Zeilen in Ihrer Datei enthalten, die nicht mit diesem Format übereinstimmen data = re.split(r'\t+', line) und if len(data) == 3: Vor dem Tupel auspacken.

bearbeiten: Diese Lösung geht davon aus, dass Sie keine leeren Felder haben. Wenn es also legal ist, dass eine Zeile nur eine ID und ein Genre hat, aber kein Titel ist, wird dies nicht funktionieren. Es funktioniert weiterhin, wenn Sie einen Titel haben können, aber kein ID oder Genre, solange es führende Registerkarten gibt, wenn ID fehlt, und nach dem Genre nach Ablauf von Tabs.

Import Reg

Verbindung zu MySQLDB herstellen

mit öffnen (file_name) als f: für Zeile in f: id, title, genre = re.split (r

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top