2016-07-28 6 views
1

CSVファイル(数百行)に次のデータがあります。残りのAPIに投稿するには分かりやすいJSONにマッサージしようとしています 私は必要最低限​​の分野で行って、しかし、ここで私が持っているものだしました:CSVをPythonでPythonでREST APIにポストするために変換しようとしています

dateAsked,author,title,body,answers.author,answers.body,topics.name,answers.accepted 
13-Jan-16,Ben,Cant set a channel ,"Has anyone had any issues setting channels. it stays at �0�. It actually tells me there are �0� files.",Silvio,"I�m not sure. I think you can leave the cable out, because the control works. But you could try and switch two port and see if problem follows the serial port. maybe �extended� clip names over 32 characters.  
Please let me know if you find out! 
    Best regards.",club_k,TRUE 

はここで大体私が取得する必要がある場所のようであるJSONのサンプルです:

json_test = """{ 
    "title": "Can I answer a question?", 
    "body": "Some text for the question", 
    "author": "Silvio", 
    "topics": [ 
     { 
      "name": "club_k" 
     } 
    ], 
    "answers": [ 
     { 
     "author": "john", 
     "body": "I\'m not sure. I think you can leave the cable out. Please let me know if you find out! Best regards.", 
    "accepted": "true" 
     } 
     ] 
}""" 

パンダはデータフレームを大丈夫(ish)にインポートしているようだが、私はそれをシリアル化できないo jsonもそれをきれいにして消毒する必要がありますが、それはスクリプト内で達成するのはかなり簡単です。

パンダでこれを行う方法もあるはずですが、私はここで壁に頭を打ちつけています。答えとトピックの両方の列を簡単に一緒に辞書やリストにマージすることはできませんPython。

答えて

2

csv.DictReaderを使用して、CSVファイルを各行の辞書として処理できます。フィールド名をキーとして使用して、.の後にフィールド名の部分でキー入力されたネストされた辞書に共通キーをグループ化する新しい辞書を構築することができます。ネストされた辞書はリスト内に保持されますが、本当に必要かどうかは不明ですが、ネストされた辞書はおそらくリストを必要とせずにトップレベルのすぐ下に置くことができます。ここではそれを行うためのコードです:あなたのデータのために

import csv 
import json 

json_data = [] 

for row in csv.DictReader(open('/tmp/data.csv')): 
    data = {} 

    for field in row: 
     key, _, sub_key = field.partition('.') 
     if not sub_key: 
      data[key] = row[field] 
     else: 
      if key not in data: 
       data[key] = [{}] 
      data[key][0][sub_key] = row[field] 

# print(json.dumps(data, indent=True)) 
# print('---------------------------') 
    json_data.append(json.dumps(data)) 

、有効print()文で、出力は次のようになります。@mhawke

 
{ 
"body": "Has anyone had any issues setting channels. it stays at '0'. It actually tells me there are '0' files.", 
"author": "Ben", 
"topics": [ 
    { 
    "name": "club_k" 
    } 
], 
"title": "Cant set a channel ", 
"answers": [ 
    { 
    "body": "I'm not sure. I think you can leave the cable out, because the control works. But you could try and switch two port and see if problem follows the serial port. maybe 'extended' clip names over 32 characters. \nPlease let me know if you find out!\n Best regards.", 
    "accepted ": "TRUE", 
    "author": "Silvio" 
    } 
], 
"dateAsked": "13-Jan-16" 
} 
--------------------------- 
+0

おかげで - 私はそれがどのようになるでしょう - 私はそれが正確だと思います私が探していたものまもなく更新されます – Scott

+0

恐ろしい - ありがとう - エンコーディングをすっごく消してしまった - 私はそれを得たことはありません! – Scott

関連する問題