Цикл For должен добавлять записи в словарь, но сохраняет только один - PullRequest
0 голосов
/ 04 февраля 2019

Это мой самый первый вопрос, я провел исследование, но не смог найти что-то похожее.

Основная цель моего скрипта, когда он закончен: я хочу, чтобы он сканировал все строки в текстовом файле на регулярное выражение.Если есть совпадение, текущая строка и инкрементный индекс должны быть добавлены к словару.В EOF теперь заполненный словарь должен быть записан в новый файл.

Текущая проблема: при запуске цикла for для сканирования строк словарь никогда не получает более одной записи, несмотря на то, что сканер фактически находит несколько совпадений (что подтверждается простым оператором печати, когда совпадение истинно. Что я пропустил?

for inputfile in inputfiles:
print("Processing "+ inputfile)

inputfile = os.path.join(filespath,inputfile)

with open (inputfile, "r", encoding="UTF-8") as infile:
    alllines = infile.readlines()

matched_lines = {}
int_index = 1
indexer = str(int_index).zfill(5)
for line in alllines:
    if re.search(match_string,line,flags=0):
        matched_lines[indexer] = line
        int_index += 1
print (matched_lines.items())

Вот что он выводит: Обработка Testfile 1.txt dict_items ([('00001', 'Zeile 5 \ n')])

Но это "Zeile 5 \"n "(совпадение с регулярным выражением составляет 5 $) несколько раз в текстовом файле, который он сканирует. Указанный файл выглядит следующим образом:

Zeile 3
Zeile 4
Zeile 5

Zeile 1
Zeile 2
Zeile 3
Zeile 4
Zeile 5

Zeile 1
Zeile 2
Zeile 3
Zeile 4
Zeile 5

Zeile 1
Zeile 2
Zeile 3
Zeile 4
Zeile 5

Zeile 1
Zeile 2
Zeile 3

и т. д.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

В вашем цикле вы обновляете int_index, но не indexer.Таким образом, каждая итерация цикла использует одно и то же значение indexer и перезаписывает одну и ту же запись в dict, поэтому сохраняется только одно значение.

0 голосов
/ 04 февраля 2019

Вы никогда не обновляете индексатор после первой итерации, посмотрите:

int_index = 1
indexer = str(int_index).zfill(5)

for line in alllines:
    if re.search(match_string,line,flags=0):
        matched_lines[indexer] = line # indexer was always the same!
        int_index += 1
        indexer = str(int_index).zfill(5) # this should fix it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...