2016-10-28 3 views
1

Как я могу создать словарь из текстового файла? Я не хочу ничего особенного в самом текстовом файле, потому что я хотел бы написать непосредственно в файл с Python.Создать словарь из текста FIle

Текстовый файл:

Soda $2 Burger $5 Shake $4 Fries $3 

Код:

file = 'file.dat' 
filer = open(file, "r") 
food = {} 
for i in filer: 
    x = i.split(" ") 
    for i in range(len(x)): 
     if i %2 == 0: 
      a = x[i] 
     else: 
      b = x[i] 
     food[a] = b 
+0

О стрелять это работает! – Indigo2003

+0

Должен ли файл быть отформатирован так? –

+0

Предпочтительно, да. Но я могу это изменить. Я просто хотел, чтобы это было просто, потому что я позже напишу. – Indigo2003

ответ

1

Oh shoot it works!

Нет, это не должно быть. Он должен дать вам сообщение «NameError: name« b »не определено». Если установлено «a», то «b» либо отменяется, либо остается прежним после предыдущего вмешательства, когда происходит food[a] = [b]. Более вещий способ приблизиться к этому может быть:

file_name = 'file.dat' 

food = {} 

with open(file_name) as file: 
    for line in file: 
     pairs = line.split() 
     food.update(zip(pairs[0::2], pairs[1::2])) 

ПРОИЗВОДИТ

{'Shake': '$4', 'Fries': '$3', 'Soda': '$2', 'Burger': '$5'} 
+0

Спасибо! Что делает оператор «с»? И что делает 'zip'? И «пары»? И '::'? Пожалуйста, объясните свой ответ. Я питон noob. – Indigo2003

+0

И это сработало для меня, потому что у меня уже были a и b определены – Indigo2003

+0

@ Indigo2003, оператор 'with' - это оператор OOP, который вызывает код очистки объекта (файла), то есть он вызывает' close() 'в файле, когда блок выходит, поэтому нам не нужно это делать. 'pairs' - просто имя моей переменной и является произвольным. 'zip()' принимает два списка и чередует их, например, на молнии. Обозначение '[x :: y]' представляет собой срез, где 'pairs [0 :: 2]' - четные элементы, а пары [1 :: 2] '- нечетные элементы. – cdlane

0

Если вы контролируете формат, вы должны просто использовать JSon

import json 

d = {'Shake': '$4', 'Fries': '$3', 'Soda': '$2', 'Burger': '$5'} 
with open('file.dat', 'w') as f: 
    json.dump(d, f) 

with open('file.dat', 'r') as f: 
    print json.load(f) 
+0

Что такое 'with' и 'as' и' load' – Indigo2003

+0

'with' и' as' - это синтаксис для * контекстных менеджеров *. Это предпочтительный способ открытия файлов, чтобы они были правильно закрыты. 'json.load' и' json.dump' будут считывать и сохранять объекты python (например, списки, dicts) в файл как json. Это описано [здесь] (https://docs.python.org/2/library/json.html#json.load). –

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