2013-05-15 57 views
4

我的格式爲製表符分隔的文件:如何把一個文本到sqlite的簡單使用Python API?

sentenceID (sid) documentID (scid) sentenceText (sent) 

例如

100004 100 即便您喜愛流連酒吧,也定然在這輕鬆安閒的一隅,來一場甜蜜沉醉的約會。 
100005 100 您可以慢慢探究菜單上所有的祕密驚喜。 

我希望把它放到sqlite3的使用下面的模式:

CREATE TABLE sent (
    sid INTEGER PRIMARY KEY, 
    scid INTEGER, 
    sent TEXT, 
    ); 

是否有使用SQLite的(http://docs.python.org/2/library/sqlite3.html)蟒蛇API將它們放到一個表中的快捷方式?

我已經做了這樣:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sqlite3 as lite 
import sys, codecs 

con = lite.connect('mycorpus.db') 

with con:  
    cur = con.cursor() 
    cur.execute("CREATE TABLE Corpus(sid INT, scid INT, sent TEXT, PRIMARY KEY (sid))") 
    for line in codecs.read('corpus.tab','r','utf8'): 
     sid,scid,sent = line.strip().split("\t") 
     cur.execute("INSERT INTO Corpus VALUES("+sid+","+scid+"'"+sent+"')") 

回答

3

下面是一個使用unicodecsv模塊的示例:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sqlite3 

import unicodecsv 


con = sqlite3.connect('mycorpus.db') 
cur = con.cursor() 
cur.execute("CREATE TABLE Corpus(sid INT, scid INT, sent TEXT, PRIMARY KEY (sid))") 

with open('corpus.tab', 'rb') as input_file: 
    reader = unicodecsv.reader(input_file, delimiter="\t") 
    data = [row for row in reader] 

cur.executemany("INSERT INTO Corpus (sid, scid, sent) VALUES (?, ?, ?);", data) 
con.commit() 

另見:

希望有所幫助。

+0

'unicodecsv'刪除我的'「'從我的'.tab'文件 – alvas

+0

報價?我沒有看到報價在你的榜樣。無論如何,你可以通過適當的'quotechar'讀者對象或一組' quoting'。參見[文件](http://docs.python.org/2/library/csv.html#csv.Dialect.quotechar)。 – alecxe

+0

=)不用擔心你的代碼適用於輸入而不'「'或'」 '。只是我文件中的其他一些行有瘋狂的引號。 – alvas

4
#!/usr/bin/python 
    # -*- coding: utf-8 -*- 

    import sqlite3 as lite 

    con = lite.connect('myCorpus.db') 
    cur = con.cursor() 

    cur.execute("CREATE TABLE Corpus(sid INT, scid INT, sent TEXT, PRIMARY KEY (sid))") 

    data=[row.split('\t') for row in file('myfile.tab','r').readlines()] 
    cur.executemany("INSERT INTO Corpus (sid, scid,sent) VALUES (?, ?, ?);", data) 

    con.commit() 
相關問題