首页 > 解决方案 > 冻结的 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()

标签: python

解决方案


这可能是因为文件的冻结版本(在 .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)

推荐阅读