Как прочитать текстовый документ построчно так, чтобы возможно было работать с каждой строкой отдельно?

Есть текстовый документ, в котором такие записи:

text;31
text;0
text;12
text;5
text;0

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


Ответы (1 шт):

Автор решения: cauf

Для поставленной задачи вам нужно иметь два файла: с текущим и предыдущим состоянием для сверки значений. Вообще, предыдущие значения можно хранить и в памяти в виде какой-либо структуры (например словаря) или в бд (sqlite).

Отмечу сразу, что это не самый оптимальный способ решения поставленной задачи, но он самый простой в понимании, что именно происходит в данными

# считываем данные из файла с текущими данными
with open(r'path\to\current_file.txt', mode='r', encoding='utf-8') as cur_fl:
    # получим список всех строк
    cur_data_lines = cur_fl.readlines()
    # на основе списка создадим словарь ключ:значение
    cur_data_dict = {
        ln.split(';')[0]:ln.split(';')[1]  # разделение строки по ';' - левая часть в ключ, правая в значение
        for ln in cur_data_lines
    }

# то же самое, но для файла с предыдущими значениями
with open(r'path\to\prev_file.txt', mode='r', encoding='utf-8') as prev_fl:
    prev_data_lines = prev_fl.readlines()
    prev_data_dict = {ln.split(';')[0]:ln.split(';')[1] for ln in prev_data_lines}

# обход по циклу всех пар ключ:значение из файла с текущими данными
for k, v in cur_data_dict.items():
    # если ключ есть в предыдущем файле и значение не равно предыдущему
    if (k in prev_data_dict.keys()) and (v != prev_data_dict[k]):
        # отправить сообщение в телеграм (здесь вызов бота написан в качестве placeholder - надо подставить свой код)
        telegram_bot.send_message(f'Для ключа {k} значение изменилось на {v}')

# переносим значения текущего файла в файл с предыдущими данными
# открывает файл с предыдущими данными на запись
with open(r'path\to\prev_file.txt', mode='w', encoding='utf-8') as prev_fl:
    # открываем файл с текущими данными на чтение
    with open(r'path\to\current_file.txt', mode='r', encoding='utf-8') as cur_fl:
        # записываем в файл с предыдущими файлами то, что прочли из файла с текущими
        prev_fl.write(cur_fl.read())
→ Ссылка