2016-09-14 14 views
1

私はプログラミングは初めてではありませんが、Pythonのデータ構造ではうまくいかないです。私はPythonを使ってテキストファイルをJSON形式に変換する方法を知りたいと思います。なぜなら、Pythonを使用していると聞いてから、import.jsonというモジュールで作業がはるかに簡単です。Pythonを使用してテキストファイルをJSON形式に変換する

ファイルは、最初の行「B細胞」は

Source Target Value 
B cells Streptococcus pneumoniae 226 
B cells Candida albicans 136 
B cells Mycoplasma 120 

のように見えるがソースで、ターゲットは、「肺炎球菌」と値が「226」です。私はコードを始めたばかりだが、それを終えることはできなかった。

import json 
prot2_names = {} 
tmpfil = open("file.txt", "r"); 
for lin in tmpfil.readlines(): 
    flds = lin.rstrip().split("\t") 
    prot2_names[flds[0]] = "\"" + flds[1] + "\"" 
    print prot2_names+"\t", 
tmpfil.close() 

あなたはcsvファイルとしてそれを読んで、jsonに変換することができ、出力が

{ 
    "nodes": [ 
    { 
     "name": "B cells" 
    }, 
    { 
     "name": "Streptococcus pneumoniae" 
    }, 
    { 
     "name": "Candida albicans" 
    }, 
    { 
     "name": "Mycoplasma" 
    }, 
    { 
    "links": [ 
    { 
     "source": 0, 
     "target": 1, 
     "value": "226" 
    }, 
    { 
     "source": 0, 
     "target": 2, 
     "value": "136" 
    }, 
    { 
     "source": 0, 
     "target": 3, 
     "value": "120" 
     } 
    ] 
} 
+0

手で最初にやってみましたか? –

+0

JSON出力はどのように見えますか?基本的な考え方は、入力ファイルをPythonのリストと辞書の階層にパースし、json.dumps(最上位リストまたはdict)を呼び出してJSONの文字列を生成することです。 –

+0

'json'をなぜ使用しないのですか? –

答えて

0

のようになりたい助けてください。しかし、区切り記号として使用したときはスペースに注意してください。スペースを含む値は注意深く処理する必要があります。そうでない場合は、可能であればspaceの代わりにセパレータ,を作成します。

あなたがしようとしている何のための作業コード

import csv 
import json 

with open('file.txt', 'rb') as csvfile: 
    filereader = csv.reader(csvfile, delimiter=' ') 
    i = 0 
    header = [] 
    out_data = [] 
    for row in filereader: 
     row = [elem for elem in row if elem] 
     if i == 0: 
      i += 1 
      header = row 
     else: 
      row[0:2] = [row[0]+" "+row[1]] 
      _dict = {} 
      for elem, header_elem in zip(row, header): 
       _dict[header_elem] = elem 
      out_data.append(_dict) 

print json.dumps(out_data) 

出力、

[ 
    { 
     "Source":"B cells", 
     "Target":"Streptococcus", 
     "Value":"pneumoniae" 
    }, 
    { 
     "Source":"B cells", 
     "Target":"Candida", 
     "Value":"albicans" 
    }, 
    { 
     "Source":"B cells", 
     "Target":"Mycoplasma", 
     "Value":"120" 
    }, 
    { 
     "Source":"B cells", 
     "Target":"Neisseria", 
     "Value":"111" 
    }, 
    { 
     "Source":"B cells", 
     "Target":"Pseudomonas", 
     "Value":"aeruginosa" 
    } 
] 

UPDATE:ちょうどあなたが必要とjsonサンプルを使用して、更新の質問に気づきました。私が書いた上記の例でそれを構築することができます。

関連する問題