Обновить переменную при чтении из txt-файла

#python

Вопрос:

У меня в папке python есть файл под названием data.txt и у меня есть еще одно досье read.py пытаюсь прочитать текст из data.txt но когда я что-то меняю в data.txt мое чтение не показывает ничего нового, что я поставил

Что-то еще, что я пробовал, не работало, и я нашел что-то, что читалось, но когда я изменил его на что-то действительно значимое, он не напечатал новый текст.

Может ли кто-нибудь объяснить, почему он не обновляется или что мне нужно сделать, чтобы исправить это?

 with open("data.txt") as f:
    file_content = f.read().rstrip("n")
    print(file_content)
 

Комментарии:

1. Как Python должен знать , что вы изменили файл? Когда with блок будет завершен, дескриптор файла исчезнет

2. Что вы имеете в виду: i change something in data.txt ? Как происходит это изменение?

3. это не сработало , вероятно, не является хорошим определением проблемы. Пожалуйста, расскажите, как выглядит ваш файл, как он выглядит после редактирования и как вы хотите, чтобы он выглядел

4. в data.txt файл содержал только содержимое…. и после изменений он был

5. Важный момент, который следует отметить в программировании, заключается в том, что время выполнения некоторого кода так же важно, как и то, что делает этот код. Если ваш код запускается один раз при запуске программы, а затем data.txt изменяется после этого, ваша программа не будет знать об этом и file_content не изменится, если вы не перечитаете файл.

Ответ №1:

Прежде всего, строки неизменяемы в Python — после их использования file.read() возвращаемый объект не может измениться.

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

Например

read.py

 def get_contents(filepath):
    with open(filepath) as f:
        return f.read().rstrip("n")
 

main.py

 from read import get_contents
import time

print(get_contents("data.txt"))

time.sleep(30)
# .. change file somehow

print(get_contents("data.txt"))
 

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

Ответ №2:

Из вашего вопроса было неясно, будете ли вы читать один или несколько раз. Так что вот шаги, которые нужно сделать:

  1. Убедитесь, что вы повторно вызываете функцию read с определенным интервалом
  2. Проверьте, действительно ли вы сохраняете файл после изменения
  3. Убедитесь, что нет конфликтов использования файлов

Итак, вот описание каждого шага:

  1. Когда вы читаете файл так, как вы им поделились, он закрывается, то есть он читается только один раз, вам нужно прочитать его несколько раз, если вы хотите увидеть изменения, поэтому сделайте это с каким-то интервалом в другом потоке или асинхронно, или как вам больше подходит ваше приложение.
  2. Этот шаг очевиден, не забудьте нажать ctrl c
  3. Может случиться так, что доступ к одному файлу осуществляется несколькими процессами, например вашим редактором и сценарием, теперь для предотвращения ошибок попробуйте выполнить следующий код:
 def read_file(file_name: str):
    while True:
        try:
            with open(file_name) as f:
                return f.read().rstrip("n")
        except IOError:
            pass