2015-03-27 2 views
-1
pronunciation_file = open('dictionary.txt') 
pronunciation = {} 
line = pronunciation_file.readline() 
while line != '': 
    n_line = line.strip().split(' ' , 1) 
    pronunciation[n_line[0]] = n_line[1].strip() 
    line = pronunciation_file.readline() 
print(pronunciation) 

код, чтобы включить файл слов и произношение в словаре (ключи слова и значение произношение), например, «A AH0 \ п ...» в { 'A ':' AH0 '...} проблема в том, что если я помещаю печать внутри цикла, она печатает нормально (но она печатает все незавершенные словари), однако, если я выложу печать вне цикла, как выше, оболочка ничего не возвращает, и когда я закрыть его, он запрашивает программа все еще работает (где, вероятно, бесконечный цикл)питон чтение файла бесконечный цикл

Помогите пожалуйста

Я также попытался вырезать п первых нескольких сотен слов и запуска программы, он работает для очень коротких файлов, но он не возвращает ничего на определенной длине: |

+0

Если вы положили 'print' внутри цикла, это не работает бесконечно? – Barmar

+0

Попробуйте положить 'print (line)' в цикле, чтобы увидеть, что он думает 'строка', и почему он не равен' '' ' – Barmar

+0

@Barmar по крайней мере, когда он находится внутри цикла, который он печатает во время снаружи, t печатать что угодно ,,, Кстати, есть ли лучший способ закончить цикл? я знаю только это из учебника: | –

ответ

6

Это не как читать из файла:

# with will also close your file 
with open(your_file) as f: 
    # iterate over file object 
    for line in f: 
     # unpack key/value for your dict and use rstrip 
     k, v = line.rstrip().split(' ' , 1) 
     pronunciation[k] = v 

Вы просто открыть файл и итерацию по объекту файла. Используйте .rstrip(), если вы хотите удалить из конца строки, также нет необходимости вызывать полосу дважды в одной строке.

Вы также можете упростить код только с помощью dict и generator expression

with open("dictionary.txt") as f: 
    pronunciation = dict(line.rstrip().split(" ",1) for line in f) 
+0

sry я вроде пропустил первые несколько строк –

+0

@NestroAbarca, не имеет значения. Цикл while - это не то, как читать файл –

2

Не тестировался, но если вы хотите использовать время цикла, идиома больше, как это:

pronunciation={} 
with open(fn) as f: 
    while True: 
     line=f.readline() 
     if not line: 
      break 
     l, r=line.split(' ', 1)  
     pronunciation[l]=r.strip() 

Но более современная идиома Python для чтения файла по строкам - это использовать цикл for, который использует ответ Padraic Cunningham. Цикл while чаще используется для чтения фиксированного фрагмента двоичного файла с помощью фиксированного фрагмента в Python.

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