Forl oop не инициализируется второй раз, несмотря на инициализацию в первый раз при разборе того же текстового файла - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь дважды проанализировать текстовый файл, но второй для l oop не работает, несмотря на то, что это тот же код, что и предыдущий. Кто-нибудь знает почему? Я уже довольно давно смотрю на этот код. Так что заранее спасибо!

Моя основная основа кода заключается в том, что код сначала извлекает уникальные даты в 1-м для l oop, а затем использует уникальную дату во 2-м для l oop, чтобы найти общую сумму ок. sh, выплаченных за каждую уникальную дату.

[Примечание: я разместил операторы печати для целей отладки.]

Вот 3 строки, отформатированные в 'transaction.txt' , каждый разделен табуляцией :

25-03-2016 Макдональдс 21,30 $ 09-12-2016 KF C 59,43 $ 08-01-2017 BurgerKing $ 47,56

Код входа

with open('transactions-output-2.txt','w') as out_file:

    with open('transactions.txt', 'r') as in_file:

        unique_dates = []

        for row in in_file:
            line = row.strip('\n').split('\t')

            date = line[0]

            if date not in date_list:
                unique_dates.append(date)


        for ref_date in unique_dates:
            print(ref_date)

            for row in in_file:
                line = row.strip('\n').split('\t')
                print(line[0])

Код выхода

25-03-2016
09-12-2016
08-01-2017

1 Ответ

1 голос
/ 27 мая 2020

Вы можете перебирать открытый файл только один раз на open(). Это связано с тем, что объект in_file находится в итераторе, который исчерпывается при запуске первого for-l oop.

Чтобы избежать этого, вы можете прочитать файл в списке перед его обработкой:

with open('transactions-output-2.txt','w') as out_file:

    with open('transactions.txt', 'r') as in_file:
        file_lines = in_file.readlines()
        unique_dates = []

        for row in file_lines:
            line = row.strip('\n').split('\t')

            date = line[0]

            if date not in date_list:
                unique_dates.append(date)


        for ref_date in unique_dates:
            print(ref_date)

            for row in file_lines:
                line = row.strip('\n').split('\t')
                print(line[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...