【发布时间】:2016-12-23 13:52:11
【问题描述】:
我有一个包含 15 列和大约 100 万行的大型 csv 文件。我想将数据解析成 tinyDB。我使用的代码如下:
import csv
from tinydb import TinyDB
db = TinyDB('db.monitor')
table = db.table('Current')
i=0
datafile = open('newData.csv', 'rb')
data=csv.reader(datafile, delimiter = ';')
for row in data:
table.insert({'WT_ID': row[0], 'time': row[1], 'MeanCurrent': row[2], 'VapourPressure': row[3], 'MeanVoltage':row[4], 'Temperature': row[5], 'Humidity': row[6], 'BarPressure': row[7], 'RPM': row[8], 'WindSector': row[9], 'WindSpeed': row[10], 'AirDensity': row[12], 'VoltageDC': row[13], 'PowerSec': row[14], 'FurlingAngle': row[15]})
i=i+1
print i
但是,这确实需要很长时间。我设置了 i 变量来跟踪进度,虽然在第一行它运行得很快,但现在已经一个多小时了,它以几乎 1Hz 的速度解析了大约 10000 行
我找不到类似的东西,所以任何帮助将不胜感激
谢谢
【问题讨论】:
-
这应该移到codereview.stackexchange.com - 也许你应该看看
insert_multiple() -
我遇到了同样的问题,在 300 次插入后插入变得非常慢(比如 1/秒)。安装 ujson 并使用
insert_multiple将我的插入速度提高了几个数量级。没有精确测量,但从 50 秒到 1 或 2...所以使用insert_multiple是这里的关键!
标签: python performance csv tinydb