我正在"转换"一个大的(~1.6GB)CSV文件,并将CSV的特定字段插入到SQLite数据库中.基本上我的代码看起来像:
import csv, sqlite3
conn = sqlite3.connect( "path/to/file.db" )
conn.text_factory = str #bugger 8-bit bytestrings
cur = conn.cur()
cur.execute('CREATE TABLE IF NOT EXISTS mytable (field2 VARCHAR, field4 VARCHAR)')
reader = csv.reader(open(filecsv.txt, "rb"))
for field1, field2, field3, field4, field5 in reader:
cur.execute('INSERT OR IGNORE INTO mytable (field2, field4) VALUES (?,?)', (field2, field4))
Run Code Online (Sandbox Code Playgroud)
一切都按照我的预期进行,但例外情况是......它需要花费大量的时间来处理.我编码不正确吗?有没有更好的方法来实现更高的性能并完成我需要的(只需将CSV的几个字段转换为SQLite表)?
**编辑 - 我尝试按照建议直接将csv导入sqlite但事实证明我的文件在字段中有逗号(例如"My title, comma").这导致导入错误.看来手动编辑文件的次数太多了......
还有其他的想法??**
我正在寻找python中的一种方法来实现与unix cut实用程序类似的功能.我知道我可以进行系统调用并以这种方式处理我的数据,但我想让它更加"pythonic"并使用python库来实现.
示例文本
abcde:12345
Run Code Online (Sandbox Code Playgroud)
我想划分:并保留第二个字段:
cut -d':' -f2
Run Code Online (Sandbox Code Playgroud)
生产:
12345
Run Code Online (Sandbox Code Playgroud)
想法?
我试图查询我的sqlite3数据库并使用列表中的值.这是我的代码:
for i in range(len(infolist)):
result = cursor.execute('SELECT COUNT(DISTINCT col1)
FROM tablename
WHERE col2 = ?', (infolist[i]))
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ProgrammingError:'提供的绑定数不正确.当前语句使用1,并且有22个提供.
该字符串有22个字符,这解释了为什么有22个绑定.显然,我没有正确地将字符串传递给SQL语句.