#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 при каждом запуске программы.
Кто-нибудь знает, что я делаю неправильно, или решение этой проблемы?
Если в этом вопросе недостаточно информации, пожалуйста, сообщите мне, и я отредактирую вопрос и опубликую его.
Примечание: я делаю это так:
- Я компилирую файл python, чтобы он стал .exe;
- Я запускаю скомпилированную программу, чтобы проверить все данные, которые она считывает;
- Я запускаю программу c # для добавления данных;
- Я повторно запускаю программу python после того, как вставил и закрыл программу на c #, чтобы файл не использовался;
- Я проверяю, что файл обновлен, но программа .exe не считывает обновленные данные;
- Я запускаю файл .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)»
Спасибо за тех, кто пытался помочь, и я надеюсь, что это полезно для кого-то еще!