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

avatar
Firedragon79
8 августа 2021 в 17:12
47
2
-1

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

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

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

with open("data.txt") as f:
    file_content = f.read().rstrip("\n")
    print(file_content)
Источник
OneCricketeer
8 августа 2021 в 17:14
2

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

quamrana
8 августа 2021 в 17:14
0

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

user15801675
8 августа 2021 в 17:14
0

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

Firedragon79
8 августа 2021 в 17:18
0

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

quamrana
8 августа 2021 в 17:23
0

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

Ответы (2)

avatar
OneCricketeer
8 августа 2021 в 17:19
0

Во-первых, строки в 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"))

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

avatar
Jake
8 августа 2021 в 17:25
0

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

  1. Убедитесь, что вы вызываете функцию чтения повторно с определенным интервалом
  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