2014-11-07 6 views
1

Я пытаюсь сделать словарь с именами актера как ключи, и в кино они в качестве значенияСоздание словаря из файла в Python

файл выглядит следующим образом:

Brad Pitt,Sleepers,Troy,Meet Joe Black,Oceans Eleven,Seven,Mr & Mrs Smith 
Tom Hanks,You have got mail,Apollo 13,Sleepless in Seattle,Catch Me If You Can 

И я хочу, чтобы это выход:

{Brad Pitt : Sleepers,Troy,Meet Joe Black,Oceans Eleven,Seven,Mr & Mrs Smith 
Tom Hanks : You have got mail,Apollo 13,Sleepless in Seattle,Catch Me If You Can} 

Я думаю, что моя проблема в том, что я не могу получить доступ к файлу по какой-то причине, хотя это, конечно, возможно, есть какая-то другая проблема с моим кодом, что я не видеть в г. Вот что у меня есть:

from Myro import * 
    def makeDictionaryFromFile(): 
    dictionary1={} 
    try: 
     infile = open("films.txt","r") 
     nextLineFromFile = infile.readline().rstrip('\r\n') 
     while (nextLineFromFile != ""): 
      line = nextLineFromFile.split(",") 
      first=line[0] 
      dictionary1[first]=line[1:] 
      nextLineFromFile = infile.readline().rstrip('\r\n') 
    except: 
     print ("File not found! (or other error!)") 
    return dictionary1 
+0

Ваш файл представляет собой файл CSV; вам может понравиться модуль ['csv'] (https://docs.python.org/3.4/library/csv.html). Кроме того, вы должны исправить форматирование кода (отступы). – senshin

+0

Поймайте исключение и распечатайте его, чтобы помочь определить проблему. «за исключением исключения как e: print e» – Cryo

+1

во-первых, ваш блок try будет более конкретным. Кроме того, было бы полезно распечатать сообщение об ошибке в предложении except. 'except Exception as e: print e' – Phani

ответ

1

Вам необходимо использовать супер полезный модуль ipdb.

try: 
    # some error 
except Exception as e: 
    print e 
    import ipdb 
    ipdb.set_trace() 

Если вы привыкнете к этому процессу, это поможет вам в этом, а также в будущей отладке.

+0

спасибо, я нашел проблему. это была просто ошибка в имени файла. – galacticcannibalism

0

попробовать это:

mydict = {} 
f = open('file','r') 
for x in f: 
    s = s.strip('\r\n').split(',') 
    mydict[s[0]] = ",".join(s[1:]) 
print mydict 

s[0] будет иметь имя актера, s[1:] все его фильмы называют


вы используете readline Readline только читать line.suppose ниже - файл под названием test.txt

Hello stackoverflow 
hello Hackaholic 

код:

f=open('test.txt') 
print f.readline() 
print f.readline() 

выход:

Hello stackoverflow 
hello Hackaholic 

вы должны также положить readline в стороне в то время как цикл, и вы также должны сделать некоторые другие изменения.

+0

Почему я не могу использовать цикл while? – galacticcannibalism

+0

проблема заключается в том, что вы используете 'readline', он читает только одну строку за раз – Hackaholic

+0

, но он выполняет итерацию по каждой строке, не так ли? поэтому он должен добавить добавить каждую строку в словарь? – galacticcannibalism

0
>>> dictionary1 = {} 
>>> for curr_line in open("films.txt").xreadlines(): 
...  split_line = curr_line.strip().split(",") 
...  dictionary1[split_line.pop(0)] = split_line 

>>> dictionary1 
{'Brad Pitt': ['Sleepers', 'Troy', 'Meet Joe Black', 'Oceans Eleven', 'Seven', 'Mr & Mrs Smith'], 'Tom Hanks': ['You have got mail', 'Apollo 13', 'Sleepless in Seattle', 'Catch Me If You Can']} 
Смежные вопросы