2016-09-14 4 views
1

Я не новичок в программировании, но не очень хорош в структурах данных python. Я хотел бы знать способ преобразования текстового файла в формат JSON с использованием python, так как я слышал, используя python, задача намного проще с модулем import.json.Преобразование текстового файла в формат JSON с использованием Python

Файл выглядит

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() 

хочет выход быть как

{ 
    "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-выход выглядел? Основная идея состоит в том, чтобы проанализировать ваш входной файл в иерархию списков и dicts Python, затем вызвать json.dumps (список верхнего уровня или dict) для создания строки 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 образца, который вам требуется. Надеюсь, вы могли бы построить его с приведенным выше примером, который я написал.

Смежные вопросы