Получение пустого словаря и вывод в новую строку

pygo спросил: 13 июня 2018 в 03:25 в: python-3.x

Почему я обновляюсь с пустым словарем в конце {} и выводом словаря в новую строку.

import re
with open("Namefile1", "r") as fh:
    for line in fh:
        #line = line.strip()
        ageC = re.findall(r'\d{1,3}', line)
        nameC = re.findall(r'[A-Z][a-z]*', line)
        ageDict = {}
        x = 0
        for eachname in nameC:
            ageDict[eachname] = ageC[x]
            x+=1
        print(ageDict)

Результат:

$ ./nameExcercise1.py
{'Alia': '30', 'Celina': '30'}
{'Soma': '40', 'Beena': '40'}
{}

Пока это должно быть:

 {'Alia': '30', 'Celina': '30', 'Soma': '40', 'Beena': '40'}

Файл:

$ cat Namefile1
Alia is 30 and Celina is 28
Soma is 40 and Beena is 22

2 ответа

Есть решение
Scott Hunter ответил: 13 июня 2018 в 03:27

Поскольку "третья" строка файла пуста, поэтому не существует возрастов или имен.

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

Scott Hunter ответил: 13 июня 2018 в 09:34
Инициализируйте его перед циклом, а не в нем.
pygo ответил: 13 июня 2018 в 03:44
Как получить это без повторной инициализации?
Martijn Pieters ответил: 13 июня 2018 в 03:28

Вам нужно пропустить пустые строки:

if not line.strip(): continue

Пустая строка (состоящая не более, чем символ новой строки и, возможно, некоторые другие пробелы, такие как пробелы или вкладки), не содержат любые имена и возрасты, а также не легко определить, когда это последняя строка в вашем файле, и вы используете cat для вывода файла на терминал.

pygo ответил: 13 июня 2018 в 03:47
thx line = line.strip() работает, чтобы удалить любые пустые строки.

Дополнительное видео по вопросу: Получение пустого словаря и вывод в новую строку

Python-джедай #3 - Работа со строками

Python-джедай #19 - Форматирование строк

5.Python для Начинающих - Строки