2016-10-04 102 views
-1
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") 

错误发生在第二行到最后一行代码中,如注释所示。该代码旨在将信息从文本文件上载到数据库,并将数据类型更改为与写入单独文件的模式匹配。错误:列表索引必须是indtegers,而不是str

我不确定第56行错误的来源,列表索引必须是整数,而不是str,或者如何解决它。

+1

的'if'声明的那怪物可以通过'如果场取代为 “A_X”, “a_y”,...]:OBJ [字段] = float(row [i])[“o2”,...]中的elif字段:obj [field] = int(row [i]):else:...'。 – chepner

+0

@chepner:好点。添加到我的答案。 –

+0

@StevenRumbalski考虑您的建议和行执行 的OBJ: OBJ [ “player_id”] = [ '03fd6907-64fc-46e7-b1f2-38af96c48037'] 我收到错误消息“ '海峡' 对象不支持项目分配'“ – user6922159

回答

2
for obj in rows: 
    row["player_id"] = ['03fd6907-64fc-46e7-b1f2-38af96c48037'] 

循环变量叫做obj但您尝试访问rowrow是从前一个循环剩下的列表(for row in reader:)。更改rowobj,问题就会消失:

for obj in rows: 
    obj["player_id"] = ['03fd6907-64fc-46e7-b1f2-38af96c48037'] 

而且,它是定义obj = {}for row in reader循环的错误。您将继续突变相同的字典,并且rows中的所有obj将相同,因为它们都将引用同一个对象。

我会重写环路:

float_fields = {'a_x', 'a_y', 'a_z', 'roll', 'pitch', 'yaw', 'ug_x', 'ug_y', 'ug_z'} 
int_fields = {'o2', 'hyd', 'bpm'} 
for row in reader: 
    obj = {} # moved inside loop 
    for item, fieldname in zip(row, fields): 
     if fieldname in float_fields: 
      obj[fieldname] = float(item) 
     elif fieldname in int_fields: 
      obj[fieldname] = int(item) 
     else: 
      obj[fieldname] = str(item) 
    rows.append(obj) 
相关问题