使用python将文本文件存储到SQLite3数据库中

时间:2015-03-19 12:29:14

标签: python sqlite

我使用python对文件进行了一些操作。现在我只需要创建一个包含两列的表...一个用于msgid,另一个用于msgstr ...所有msgid应存储在msgid列中,并且所有{{1 s应存储在msgstr列..

我对编程世界很陌生。请帮助我。我粘贴了我在下面所做的事情:

msgstr

1 个答案:

答案 0 :(得分:1)

这有两个部分:

  1. 从中提取msgid和相应的msgstr值 .po文件。
  2. msgidmsgstr插入SQLite中的表格中 数据库中。
  3. 对于第1部分,我建议使用babel模块。您可以使用

    进行安装
    pip install babel
    

    使用babel.messages.pofile.read_po()功能阅读.po文件。这将返回一个目录,您可以在该目录上迭代从文件解析的所有消息:

    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)
    

    第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'))
    

    <强>输出

    "11 inches/sec." translates to "11 дюймов/с"
    "A Samba password is required to export printer drivers" translates to "Для экспорта драйверов принтера требуется пароль Samba"
    

    你可能会注意到有很多msgid个空msgstr个。如果您不想要它们,请修改

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

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