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

コメントは、2番目から最後の行のコードでエラーが発生します。このコードは、テキストファイルからデータベースに情報をアップロードすることを目的としています。データ型を変更すると、別のファイルに書き込まれたスキーマと一致します。エラー:リストインデックスはstrではなく、indtegersでなければなりません

56行目のエラーの原因がわからない、リストインデックスが整数でなければならない、strではない、またはそれを修正する方法。

+1

[ "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'] 私はエラーが表示された「 'strの' オブジェクトをサポートしていません。 item assignment '" – user6922159

答えて

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

ループ変数がobjと呼ばれていますがrowにアクセスしようとしています。 rowは、前のループ(for row in reader:)から残されたリストです。 objからrowを変更し、問題が離れて行く必要があります。

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

また、それはfor row in readerループのobj = {}外を定義するためのバグがあります。あなたは同じ辞書に変異を残しておき、objrowsにすべて同じオブジェクトへの参照であるため同じものになります。

私はそのループを書き換えます: `if`文のモンスターがであれば、フィールド`で置き換えることができること

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) 
関連する問題