Не удается найти файл данных CSV, в котором сохранен прогресс (база Python / Pyinstaller, возможно, sys. MEIPASS или NSIS?) - PullRequest
0 голосов
/ 06 апреля 2020

Квалификатор совершенно новый для Python. Я написал Python код, импортирующий pandas, selenium, sys, os, tkinter и pillow, а затем соединил с pyinstaller и NSIS. Программа использует CSV-файл для своего ввода и обновляет его в зависимости от действий пользователя. Обновления должны быть сохранены внутри, поэтому, если пользователь выходит, он может продолжить с того места, где остановился. Все сохраняется должным образом, пользовательский прогресс сохраняет и забирает правильно, и если я "скачать CSV" файл является современным. С функциональной точки зрения все работает отлично.

Однако, когда программа запускается, csv, с которого она запускается, находится не там, где она сохраняет прогресс. Это остается прежним. Данные о прогрессе сохраняются в другом месте. С точки зрения безопасности данных мне нужно знать, где они сохраняются. Я не смог найти его после нескольких часов поиска.

Даже если я удалю программу и переустановлю, она все равно запоминает прогресс. Протестировано также на машинах без Python et c.

Я использую:

if getattr(sys, 'frozen', False):
    CurrentPath = sys._MEIPASS
else:
    CurrentPath = os.path.dirname(__file__)

Может ли это быть? Сама строка сохранения довольно стандартная:

df.to_csv('file_s.csv',encoding='utf-8', index=False)

Моя единственная другая идея - это касается установщика NSIS и сценария удаления. Ужасно мало уроков для начинающих. Если сообщество считает, что это проблема, я думаю, что лучше написать новый вопрос с соответствующей информацией.

Извинения, если это слишком расплывчато и радо предоставить больше необходимой информации!

1 Ответ

0 голосов
/ 07 апреля 2020

Вы определяете переменную CurrentPath, используя стандартный подход «если заморожен», который выглядит хорошо. Но, похоже, вы не используете его при сохранении файла.

Попробуйте явно объединить его с именем файла для сохранения

df.to_csv(os.path.join(CurrentPath,'file_s.csv'),encoding='utf-8', index=False)

Обратите внимание, что когда вы запускаете как исполняемый файл, sys._MEIPASS будет временной папкой, созданной (на Windows как минимум) где-то вроде C:\Users\<you>\AppData\Local\Temp\MEIXXX

...