2015-03-16 3 views
-2

Итак, это мой код:Как печатать больше строк?

file = open("save_file.txt") 

for each_line in file: 
    s = {} 
    (s['name'], s['race'], s['class'], s['FOR'], s['INT'], s['DES']) = each_line.split(";") 
file.close() 
print(s['name']) 
print(s['race']) 
print(s['class']) 
print(s['FOR']) 
print(s['INT']) 
print(s['DES']) 
print(s['name']) 

save_file.txt:

Nome: d;Raça: Humano;Classe: Mago;FOR: 5;INT: 7;DES: 5 
Nome: g;Raça: umano;Classe: Mo;FOR: 56;INT: 47;DES: 85 

При запуске программы, программа только распечатать вторую линию. Как напечатать две или несколько строк?

+0

Печать 'line.split («;»)' и проверить количество значений возвращенный – thefourtheye

+0

предоставляет ввод/вывод о том, что происходит в этой проблеме. –

ответ

0

Если программа просто печатает вторую строку, это будет связано с тем, что вы переписываете словарь на каждой итерации цикла, а затем печатаете только после последней итерации цикла. Попробуйте что-то вроде этого:

file = open("save_file.txt") 

for each_line in file: 
    s = {} 
    (s['name'], s['race'], s['class'], s['FOR'], s['INT'], s['DES']) = each_line.split(";") 
    print(s['name']) 
    print(s['race']) 
    print(s['class']) 
    print(s['FOR']) 
    print(s['INT']) 
    print(s['DES']) 
    print(s['name']) 
file.close() 
+0

Спасибо! Оно работает! –

1
  • Во-первых, вы создаете новый пустой dict для каждой строки в файле, так s мог всегда содержать только значения из последней строки в файле. Чтобы сохранить значения из нескольких строк, вам необходимо переместить инициализацию s вне цикла for.

  • Во-вторых, если вы хотите, чтобы каждый из ключей в вашем dict содержал несколько строковых значений, вам необходимо будет их сохранить в list или какой-либо другой последовательности. Я бы рекомендовал использовать defaultdict, который позволит вам автоматически заполнить недостающие ключи с пустыми списками:


from collections import defaultdict 

# ... 

# missing keys will be automatically populated with empty lists 
s = defaultdict(list) 
keys = ['name', 'race', 'class', 'FOR', 'INT', 'DES'] 

for each_line in file: 

    # in order to store multiple values under each key, append them to 
    # a list 
    for kk, vv in zip(keys, each_line.split(";")): 
     s[kk].append(vv) 

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