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