【发布时间】:2016-10-04 16:46:19
【问题描述】:
fields = ["date", "time", "a_x", "a_y", "a_z", "roll", "pitch", "yaw", "ug_x", "ug_y", "ug_z", "o2", "hyd", "bpm"]
import csv
f = open("data.TXT")
dialect = csv.Sniffer().sniff(f.read(), delimiters=' ')
f.seek(0)
reader = csv.reader(f, dialect)
rows = []
obj = {}
for row in reader:
for i, field in enumerate(fields):
obj[field] = row[i]
if field == "a_x":
obj[field] = float(row[i])
elif field == "a_y":
obj[field] = float(row[i])
elif field == "a_z":
obj[field] = float(row[i])
elif field == "roll":
obj[field] = float(row[i])
elif field == "pitch":
obj[field] = float(row[i])
elif field == "yaw":
obj[field] = float(row[i])
elif field == "ug_x":
obj[field] = float(row[i])
elif field == "ug_y":
obj[field] = float(row[i])
elif field == "ug_z":
obj[field] = float(row[i])
elif field == "o2":
obj[field] = int(row[i])
elif field == "hyd":
obj[field] = int(row[i])
elif field == "bpm":
obj[field] = int(row[i])
else:
obj[field] = str(row[i])
rows.append(obj)
import requests
requests.get("http://localhost:5000/api/players")
for obj in rows:
# *** Here is the error ***
row["player_id"] = ['03fd6907-64fc-46e7-b1f2-38af96c48037']
requests.post("http://localhost:5000/api/impact")
错误发生在代码的倒数第二行,如注释所示。该代码旨在将信息从文本文件上传到数据库,更改数据类型以匹配写入单独文件的架构。
我不确定第 56 行的错误来源,即列表索引必须是整数,而不是 str,或者如何修复它。
【问题讨论】:
-
if语句的那个怪物可以用if field in ["a_x", "a_y", ...]: obj[field] = float(row[i]) elif field in ["o2", ...]: obj[field] = int(row[i]): else: ...代替。 -
@chepner:好点。将其添加到我的答案中。
-
@StevenRumbalski 采纳您的建议并在行中为 obj 实施:obj["player_id"] = ['03fd6907-64fc-46e7-b1f2-38af96c48037'] 我收到错误“'str' object does不支持项目分配'"
-
在我的回答中,我确实忘记在我重写的循环中包含
rows.append(obj),但我认为这不是你遇到的问题。该错误消息的意思是rows包含字符串,而不是字典。我在您的代码中看不到您将字符串附加到rows,所以我不确定发生在哪里。 -
@StevenRumbalski 我相信在我使用的库中导入 csv 文件的标准格式会将数据放入字符串中。此代码只是尝试根据其字段重新分配数据类型。在另一个文件中,有一个指定数据类型的架构
标签: python mongodb csv database