Как прочитать текстовый документ построчно так, чтобы возможно было работать с каждой строкой отдельно?
Есть текстовый документ, в котором такие записи:
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())