Python не считывает обновленные данные json

#python #json #python-3.x

#python #json #python-3.x

Вопрос:

Итак, у меня есть программа на python, которая считывает некоторые данные json. У меня есть программа на c # для вставки данных в файл json. Данные успешно вставляются.

Моя настоящая проблема в том, что, допустим, у меня есть эти данные в json [{"a": "b"},{"c": "d"},{"e": "f"}] по умолчанию, когда я добавляю больше данных, json становится [{"a": "b"},{"c": "d"},{"e": "f"},{"g": "h"}] успешно добавленным, как я уже говорил ранее, но когда я запускаю .py, я получаю все данные, как и должно быть, когда я запускаю ту же программу, но как.exe, я получаю данные только перед обновлением, поэтому я получаю это ( [{"a": "b"},{"c": "d"},{"e": "f"}] ) Я на 100% уверен, что читаю из одного и того же файла в 2 программах (c # используется для вставки, python используется для чтения и работы с данными) Я читаю данные в скрипте python следующим образом:

 json_path = f"{os.environ['SYSTEMDRIVE']}\Program Files\PFO\Extensions\extensions.json"
with open(json_path, "r") as jf:
                #jf.flush()
                d = json.load(jf)
                #Work with data here...
  

Я попробовал jf.flush() , но ничего не изменил.
Я провел некоторое исследование и не смог найти ничего, что помогло бы мне.
Я не знаю, есть ли какой-то кэш, например, память, которую нужно очистить, или есть способ принудительно загружать данные json при каждом запуске программы.
Кто-нибудь знает, что я делаю неправильно, или решение этой проблемы?
Если в этом вопросе недостаточно информации, пожалуйста, сообщите мне, и я отредактирую вопрос и опубликую его.

Примечание: я делаю это так:

  1. Я компилирую файл python, чтобы он стал .exe;
  2. Я запускаю скомпилированную программу, чтобы проверить все данные, которые она считывает;
  3. Я запускаю программу c # для добавления данных;
  4. Я повторно запускаю программу python после того, как вставил и закрыл программу на c #, чтобы файл не использовался;
  5. Я проверяю, что файл обновлен, но программа .exe не считывает обновленные данные;
  6. Я запускаю файл .py в визуальном коде, и он считывает новые данные;

Примечание 2: Чтобы скомпилировать файл .py в файл .exe, я открываю папку своего проекта в визуальном коде и в консоли запускаю эту команду
pyinstaller --onefile -n="PFO" script.py
Заранее спасибо.

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

1. Каким-то pyinstaller образом захватывает имя файла как зависимость и включает его в свой исполняемый файл?

2. Я не уверен, но я делал другие вещи, pyinstaller и это работало просто отлично…

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

4. Очевидно jf.flush() , что это не решение, это имеет смысл, потому что я записываю в файл с c # и закрываю файл после записи новых данных.

Ответ №1:

Итак, после почти 4 часов отладки я обнаружил, что проблема была не в коде, а в расположении папки.

Я всегда запускаю свой редактор кода от имени администратора, поэтому файл .py может считывать данные json.

Но EXE-файл работал нормально, А НЕ от имени администратора.
Чтобы решить эту проблему, я просто переместил папку из «C:Program Файлы» в «C: Program Files (x86)»

Спасибо за тех, кто пытался помочь, и я надеюсь, что это полезно для кого-то еще!