【发布时间】:2015-04-23 06:14:10
【问题描述】:
我有一个包含超过一百万行的 CSV 文件,我正在尝试解析该文件并将这些行插入数据库。
with open(file, "rb") as csvfile:
re = csv.DictReader(csvfile)
for row in re:
//insert row['column_name'] into DB
对于小于 2 MB 的 csv 文件,这很有效,但除此之外的任何内容最终都会占用我的内存。这可能是因为我将 Dictreader 的内容存储在一个名为“re”的列表中,它无法遍历如此庞大的列表。我肯定需要访问带有列名的 csv 文件,这就是我选择 dictreader 的原因,因为它很容易提供对我的 csv 文件的列级访问。谁能告诉我为什么会发生这种情况以及如何避免这种情况?
【问题讨论】:
-
虽然没有回答您的实际问题,但如果您需要按原样加载数据,使用数据库自己的设施可能会更容易和更快(例如,Postgres 中的
COPY table(col1, col2) FROM file WITH CSV或LOAD DATA INFILE在 MySQL 中)。