【发布时间】:2011-08-21 23:50:58
【问题描述】:
我正在“转换”一个大型 (~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))
除此之外,一切都按我的预期工作......它需要大量的时间来处理。我编码不正确吗?有没有更好的方法来实现更高的性能并完成我所需要的(只需将 CSV 的几个字段转换为 SQLite 表)?
**EDIT -- 我尝试按照建议将 csv 直接导入 sqlite,但结果发现我的文件在字段中有逗号(例如"My title, comma")。这会导致导入错误。看来这些事件太多了,无法手动编辑文件...
还有其他想法吗??**
【问题讨论】:
-
这是一个大文件。需要多长时间?
-
有多少重复记录?如果有很多,保留已插入记录的本地
set可能会更快,并完全跳过对重复的 SQL 的调用。 -
Here 是一些 MySQL 批量加载速度提示。
-
您使用的是什么操作系统和 Python 版本?
-
“出现的次数似乎太多,无法手动编辑文件..”。让我们想想。手动更改太多?如果您有一种编程语言,可以让您编写程序将 CSV 文件重新格式化为制表符分隔的文件。任何想法可以使用哪种语言来编写这样的程序?