【发布时间】:2020-06-02 13:02:50
【问题描述】:
我有许多 csv 文件,我正在尝试将它们包含的所有数据传递到数据库中。出于这个原因,我发现我可以使用 glob 库来遍历我文件夹中的所有 csv 文件。以下是我使用的代码:
import requests as req
import pandas as pd
import glob
import json
endpoint = "testEndpoint"
path = "test/*.csv"
for fname in glob.glob(path):
print(fname)
df = pd.read_csv(fname)
for index, row in df.iterrows():
#print(row['ID'], row['timestamp'], row['date'], row['time'],
# row['vltA'], row['curA'], row['pwrA'], row['rpwrA'], row['frq'])
print(row['timestamp'])
testjson = {"data":
{"installationid": row['ID'],
"active": row['pwrA'],
"reactive": row['rpwrA'],
"current": row['curA'],
"voltage": row['vltA'],
"frq": row['frq'],
}, "timestamp": row['timestamp']}
payload = {"payload": [testjson]}
json_data = json.dumps(payload)
response = req.post(
endpoint, data=json_data, headers=headers)
此代码一开始似乎运行良好。但是,一段时间后它开始变得非常慢(我注意到这一点是因为我在上传数据时打印了时间戳)并最终完全停止。这是什么原因?我在这里做的事情真的没有效率吗?
【问题讨论】:
-
速度逐渐下降,因为您正在迭代 (df.iterrows)。我建议您阅读所有 csv 文件,进行所有处理,然后批量加载到数据库中。我知道 postgres psycopg2(我不知道你在哪个数据库上操作)有一个允许批量加载的界面,而且速度非常快。