Speichern einer Textdatei in SQLite3-Datenbank mit python

Ich habe einige Operationen mit einer Datei mit Python gemacht. Jetzt musst du nur einen tisch mit zwei säulen erstellen … man ist für msgid und ein anderer ist für msgstr … alle msgid s sollte in msgid Spalte gespeichert werden und alle msgstr s sollte in msgstr Spalte gespeichert werden ..

Ich bin sehr neu in der Programmierwelt. Bitte helfen Sie mir. Ich habe geklebt, was ich unten getan habe:

 fn='ru.po' f=open(fn) output=[] for line in f: if not '#' in line: output.append(line) f.close() f=open(fn,'w') f.writelines(output) f.close 

  • Öffnen von sqlite3-Datenbank aus python im schreibgeschützten Modus
  • Sichtbarkeit von os.environ zu C Erweiterungsmodulen
  • Sharing a: memory: datenbank zwischen verschiedenen threads in python mit sqlite3 package
  • Platzhalter für Tabellenname
  • Wie soll ich Spaltennamen in pysqlite parametrieren, um SQL Injection zu vermeiden
  • Fehler beim Versuch, MySQL mit sqlalchemy (Flask) zu verbinden
  • Warum bekomme ich plötzlich "OperationalError: kein solcher Tisch"?
  • SQLite Data Change Notification Callbacks in Python oder Bash oder CLI
  • One Solution collect form web for “Speichern einer Textdatei in SQLite3-Datenbank mit python”

    Es gibt 2 Teile dazu:

    1. Extrahieren des msgid und der entsprechenden msgstr Werte aus der .po-Datei.
    2. msgid msgstr msgid und msgstr in eine Tabelle in der SQLite-Datenbank ein.

    Für Teil 1 schlage ich vor, das babel Modul zu verwenden. Sie können es mit installieren

     pip install babel 

    Verwenden Sie die Funktion babel.messages.pofile.read_po() , um die .po Datei zu lesen. Dies wird einen Katalog zurückgeben, auf dem Sie über alle aus der Datei analysierten Nachrichten iterieren können:

     from babel.messages.pofile import read_po with open('ru.po') as po_file: cat = read_po(po_file) for message in cat: if message.id: print '{!r} -> {!r}'.format(message.id, message.string) 

    Für Teil 2:

     import sqlite3 conn = sqlite3.connect('catalog.db') cursor = conn.cursor() result = cursor.execute('CREATE TABLE ru (msgid TEXT, msgstr TEXT)') # bulk insert the messages messages = [(msg.id, msg.string) for msg in cat if msg.id] result = cursor.executemany('INSERT INTO ru (msgid, msgstr) VALUES (?, ?)', messages) assert(result.rowcount == len(messages)) conn.commit() result = cursor.execute("SELECT * from ru where msgid = '11 inches/sec.'") msgid, msgstr = result.fetchone() # .encode('utf8') can be removed for Python 3 print '"{}" translates to "{}"'.format(msgid, msgstr.encode('utf8')) msgid = 'A Samba password is required to export printer drivers' result = cursor.execute("SELECT * from ru where msgid = ?", (msgid,)) msgid, msgstr = result.fetchone() print '"{}" translates to "{}"'.format(msgid, msgstr.encode('utf8')) 

    Ausgabe

     "11 Zoll / Sek."  Übersetzt auf "11 дюймов / с"
     "Ein Samba-Passwort ist erforderlich, um Druckertreiber zu exportieren" übersetzt in "Для экспорта драйверов принтера требуется пароль Samba"
    

    Du musst vielleicht feststellen, dass es viele msgid s mit leeren msgstr s gibt. Wenn du sie nicht willst, dann modifizieren

     messages = [(msg.id, msg.string) for msg in cat if msg.id] 

    nach

     messages = [(msg.id, msg.string) for msg in cat if msg.id and msg.string] 
    Python ist die beste Programmiersprache der Welt.