python - 冻结的 Python 文件无法访问“Save_File”
问题描述
打包我的程序后,我决定对其进行测试以确保它有效,发生了一些事情,但主要问题在于 Save_File。
我使用 Save_File.py 保存数据,静态保存数据。但是,冻结的 python 文件不能对这个文件做任何事情。它无法写入或读取。写作说保存成功,但在加载时它将所有值再次重置为零。
任何 .py 文件执行此操作是否正常?
这是pyinstaller中的问题吗?
冷冻过程不好?
或者是否有其他原因导致冻结的文件无法写入、读取或与不在其中的文件交互?(Save_File 被冻结在里面并且不起作用,但是删除它会导致错误,类似于它从未存在过)。
所以exe不能看到自身外部或内部变化......
编辑:添加了保存文件的最基本版本,但基本上,它被删除和重写了很多。
def save():
with open("Save_file.py", "a") as file:
file.write("healthy = " + str(healthy) + "\n")
file.write("infected = " + str(infected) + "\n")
file.write("zombies = " + str(zombies) + "\n")
file.write("dead = " + str(dead) + "\n")
file.write("cure = " + str(cure) + "\n")
file.write("week = " + str(week) + "\n")
file.write("infectivity = " + str(infectivity) + "\n")
file.write("infectivity_limit = " + str(infectivity_limit) + "\n")
file.write("severity = " + str(severity) + "\n")
file.write("severity_limit = " + str(severity_limit) + "\n")
file.write("lethality = " + str(lethality) + "\n")
file.write("lethality_limit = " + str(lethality_limit) + "\n")
file.write("weekly_infections = " + str(weekly_infections) + "\n")
file.write("dna_points = " + str(dna_points) + "\n")
file.write("burst = " + str(burst) + "\n")
file.write("burst_price = " + str(burst_price) + "\n")
file.write("necrosis = " + str(necrosis) + "\n")
file.write("necrosis_price = " + str(necrosis_price) + "\n")
file.write("water = " + str(water) + "\n")
file.write("water_price = " + str(water_price) + "\n")
file.write("air = " + str(air) + "\n")
file.write("blood = " + str(blood) + "\n")
file.write("saliva = " + str(saliva) + "\n")
file.write("zombify = " + str(zombify) + "\n")
file.write("rise = " + str(rise) + "\n")
file.write("limit = int(" + str(healthy) + " + " + str(infected) + " + " + str(dead) + " + " + str(zombies) + ")\n")
file.write("old = int(1)\n")
Clear.clear()
WordCore.word_corex("SAVING |", "Save completed successfully")
time.sleep(2)
Clear.clear()
player_menu()
解决方案
这可能是因为文件的冻结版本(在 .zip 文件中的某处)被加载,而不是您正在编写的文件(在文件未冻结时工作)
这是不好的做法:
- have a zillion global variables to hold your persistent data
- generate code in a python file just to evaluate it back again (it's _self-modifying code_).
如果您使用 C 或 C++ 语言,您会生成一些代码来存储您的数据,然后将其编译到您的新可执行文件中吗?你会宣布 300 个全局变量吗?我不这么认为。
您最好使用json
数据格式和变量字典,这适用于冻结或不冻结:
你的字典会是这样的:
variables = {"healthy" : True, "zombies" : 345} # and so on
访问您的变量:
if variables["healthy"]: # do something
然后保存功能:
import json
def save():
with open("data.txt", "w") as file:
json.dump(variables,file,indent=3)
创建一个包含如下数据的文本文件:
{
"healthy": true,
"zombies": 345
}
和加载函数(声明variables
为全局以避免创建相同的变量,但仅限局部)
def load():
global variables
with open("data.txt", "r") as file:
variables = json.load(file)
推荐阅读
- django - Django寻找模板文件的错误路径
- ios - (点击)事件仅适用于 IOS 设备 - Angular 10 应用程序
- java - 基于 Flutter 的 Android 应用程序抛出 MissingPluginException(未找到通道上的方法的实现)
- java - 调用 onSaveInstanceState 后 GridLayoutManager 变为 LinearLayoutManager
- java - 如何使用android studio在firebase上注册表格包括fname姓氏等
- python - 如何仅在 python 中使用输入函数在列表中输入值?
- javascript - SVG在滚动动画上调整大小断断续续/口吃
- java - 我无法在 Eclipse 中连接数据库
- java - 如何使用 Selenium 和 Java 将文本发送到 Angular 页面中的金额字段
- python-3.x - 调试 Numpy VisibleDeprecationWarning(来自参差不齐的嵌套序列的 ndarray)