2016-09-14 77 views
1

我对编程并不陌生,但不擅长Python数据结构。我想知道一种使用python将文本文件转换为JSON格式的方法,因为我听说使用python,通过一个名为import.json的模块,该任务变得更容易。使用Python将文本文件转换为JSON格式

文件看起来像

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

对于第一行的“B细胞”是源,目标是“肺炎链球菌”和值是“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() 

希望输出到像

{ 
    "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(顶级列表或字典)来生成一串JSON。 –

+0

如果你不使用它,你为什么要导入'json'? –

回答

0

你可以阅读它作为一个csv文件,并将其转换成json。但是,请小心使用空格作为分隔符,应该仔细处理空格的值。否则,如果可能的话,使分隔符,而不是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样品只注意到你的问题更新。希望,你可以用我写的上面的例子来构建它。

相关问题