2013-11-24 2 views
-1

У меня есть этот файл:Как удалить ненужные кавычки в словаре

shorts: cat, dog, fox 
longs: supercalifragilisticexpialidocious 
mosts:dog, fox 
count: 13 
avglen: 5.6923076923076925 

cat 3 
dog 4 
fox 4 
frogger 1 
supercalifragilisticexpialidocious 1 

Я хочу, чтобы преобразовать это в словарь с ключами, как шорты, тоскует, Моста, рассчитывает и avglen и ценности, как WHATS после двоеточий. Для последней части. это будет словарь в словаре.

У меня есть этот код:

def read_report(filename): 
list1 = [] 
d = {} 
file_name = open(filename) 
for line in file_name: 
    list1.append(line[:-1]) 
d = dict(zip(list1[::2], list1[1::2])) 
file_name.close() 
return d 

и результат:

{'mosts: dog, fox': 'count: 13', 'shorts: cat, dog, fox': 'longs: supercalifragilisticexpialidocious', 'cat 3': 'dog 4', 'fox 4': 'frogger 1', 'avglen: 5.6923076923076925': ''} 

Как избавиться от нежелательного двоеточия и изменить расположение кавычек, так что она выглядит действительный словарь?

+0

Попробуйте 'str.split (':')' как-то начать. – poke

+0

(Я пробовал и проваливался в прошлом, может кто-нибудь объяснить OP, почему 'file_name' не является именем файла?) – DSM

+0

, если последняя часть является словарем в словаре, каков его ключ? – tMJ

ответ

0

Предполагая, что файл называется txtfile.txt:

lines = open("txtfile.txt").readlines() 
results = {} 
last_part = {} 
for line in lines: 
    if line.strip() == "": 
     continue 
    elif line.startswith(tuple("shorts: longs: mosts: count: avglen:".split())): 
     n, _, v = line.partition(":") 
     results[n.strip()] = v.strip() 
    else: 
     n, v = line.split(" ") 
     last_part[n.strip()] = v.strip() 
results['last_part'] = last_part 
print results 

Выведет:

{'count': '13', 'shorts': 'cat, dog, fox', 'longs': 'supercalifragilisticexpialidocious', 'mosts': 'dog, fox', 'avglen': '5.6923076923076925', 'last_part': {'frogger': '1', 'fox': '4', 'dog': '4', 'supercalifragilisticexpialidocious': '1', 'cat': '3'}}` 
0

Попробуйте JSON, это стандартная библиотека на борту. Ваш файл будет выглядеть так.

'{"shorts": ["cat", "dog", "fox"], "longs": "supercalifragilisticexpialidocious", "mosts": ["dog", "fox"], "count": 13, "avglen": "5.6923076923076925", "cat": 3, "dog": 4, "fox": 4, "frogger": 1, "supercalifragilisticexpialidocious": 1}' 

И вы, сценарий python, будете такими.

import json 
f = open('my_file.txt','r') 
my_dictionary = json.loads(f.read()) 
f.close() 

print my_dictionary 

Выход:

{u'count': 13, u'shorts': [u'cat', u'dog', u'fox'], u'longs': u'supercalifragilisticexpialidocious', u'mosts': [u'dog', u'fox'], u'supercalifragilisticexpialidocious': 1, u'fox': 4, u'dog': 4, u'cat': 3, u'avglen': u'5.6923076923076925', u'frogger': 1} 

JSON! это так здорово!

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