python-文件内容在程序结束后消失
我有一个绑定到键的函数 此函数将某些内容写入文件,正如它应该的那样:python-文件内容在程序结束后消失,python,file,Python,File,我有一个绑定到键的函数 此函数将某些内容写入文件,正如它应该的那样: def saveGame(): from modules.logic import game from modules.logic.player import Player from modules.logic.light import Light filename = str(time.time()) data = open("myData", "a") lis1 = [] if (len(game.active_entit
def saveGame():
from modules.logic import game
from modules.logic.player import Player
from modules.logic.light import Light
filename = str(time.time())
data = open("myData", "a")
lis1 = []
if (len(game.active_entities)>0):
for key in game.active_entities:
if (not isinstance(game.active_entities, Light)):
if(not isinstance ( game.active_entities, Light)):
ent = game.active_entities[key]
ent2 = ent.networknew()
lis1.append(ent2)
lis1.insert(0, game.get_player().networknew())
lis1.insert(0,game.seed)
saved = open(filename, "w")
pickle.dump( lis1,saved, 2)
try:
data.write(filename+"\n")
except Exception as e:
print e
当按下某个键时,会调用savegame。它创建一个新文件,在其中保存某些内容(此处保存的内容并不重要),然后在另一个文件中保存新文件的名称
但是,当我结束并重新启动程序时,第二个文件是空的,即使如此,只要程序仍在运行,它就具有正确的内容。
节目结束后,我想保留节目内容。可能吗?
怎么做
关于你的问题:
我通过打开一个窗口开始游戏:
class StartWindow:
def __init__(self):
data = open("myData", "w")
data.close()
data = open ("myData", "rb")
self.master = Tk()
if (not data.readline()== ""):
optsdumped = data.readlines()[0]
print optsdumped
opts = cPickle.loads(optsdumped)
print opts
variable = StringVar(self.master)
variable.set("one") # default value
self.w = OptionMenu(self.master, variable, "one", "two", "three").grid(row = 8, sticky = W)
#self.w.grid(row = 7, sticky = W)
print "optionmenu"
self.l0 =Label (self.master,fg = "blue", text = "W=jump", bg = "magenta", font = ("comic sans ms", 20, "bold")).grid(row=0, sticky = W)
self.l1=Label (self.master,fg = "blue", text = "A=left",bg = "magenta",font = ("comic sans ms", 20, "bold")).grid(row = 1, sticky = W)
self.l2=Label(self.master,fg = "blue", text = "D=Duck", bg = "magenta",font = ("comic sans ms", 20, "bold")).grid(row=2, sticky = W )
self.l3=Label(self.master,fg = "blue", text = "Mouse = Shoot", bg = "magenta",font = ("comic sans ms", 20, "bold")).grid(row=3, sticky = W)
self.l4=Label(self.master,fg = "blue", text = "S=Duck", bg = "magenta",font = ("comic sans ms", 20, "bold")).grid(row=4, sticky = W)
self.l5=Label(self.master,fg = "blue", text="Seed:", bg = "magenta",font = ("comic sans ms", 20, "bold")).grid(row=5, sticky = W)
self.master.minsize(50, 50)
self.master.weight = 2
self.master.title("Fluffocalypse")
print self.master.configure(bg = "magenta")
self.e1 = Entry(self.master)
self.e1.grid(row=5, column=1, sticky = W)
self.b1 =Button(self.master, text = "Start", command = self.startGameNormally).grid(row = 6, sticky = W)
self.b2 = Button(self.master, text = "alten Spielstand laden", command =self.loadOldGame).grid(row = 7, sticky = W)
mainloop()
好吧,窗口就在那里,但不知何故,if子句永远不会实现,而且我的数据显然是空的,即使我用手打开它。为什么会这样?您从未明确关闭过该文件,因此它的内容可能从未实际写入过。您需要显式的
saved.close()
,或者最好使用上下文管理器,例如:
with open(filename, "w") as saved:
pickle.dump( lis1,saved, 2)
try:
data.write(filename+"\n")
except Exception as e:
print e
对
数据
执行同样的操作是一个好主意,即使它仅为读取而打开。您从未明确关闭该文件,因此它的内容可能从未实际写入。您需要显式的saved.close()
,或者最好使用上下文管理器,例如:
with open(filename, "w") as saved:
pickle.dump( lis1,saved, 2)
try:
data.write(filename+"\n")
except Exception as e:
print e
对
数据
执行同样的操作是一个好主意,即使它仅为读取而打开。每次运行程序时,您都使用w
标志打开文件。这将销毁上次运行保存的数据。使用附加模式。每次运行程序时,您都使用w
标志打开文件。这将销毁上次运行保存的数据。使用附加模式。实际上问题并没有被保存-我想要的所有数据都在那里并保留在那里(可能是因为我使用dump而不是write?)。然而,它们并不停留在数据中。在我提出这个问题之后,我确实尝试过关闭数据——知道有用吗。如果我使用函数绑定到的键,然后在程序仍在运行时打开myData,则内容是正确的。我一关闭程序,文件myData就会保留下来,但它的内容就消失了。@newnewbie如果你试图关闭文件,但这没有帮助,那么就显示应该可以工作但不能工作的代码。我刚刚意识到,当我关闭旧程序时,内容不会消失,而是当我重新启动它时。我会在几秒钟内根据你的问题编辑我的问题。@newnewnewbie你用w
打开data
,这会截断它,并期望它包含内容?实际上问题没有被保存-我想要的所有数据都在那里,并留在那里(可能是因为我使用dump而不是write?)。然而,它们并不停留在数据中。在我提出这个问题之后,我确实尝试过关闭数据——知道有用吗。如果我使用函数绑定到的键,然后在程序仍在运行时打开myData,则内容是正确的。我一关闭程序,文件myData就会保留下来,但它的内容就消失了。@newnewbie如果你试图关闭文件,但这没有帮助,那么就显示应该可以工作但不能工作的代码。我刚刚意识到,当我关闭旧程序时,内容不会消失,而是当我重新启动它时。我会在几秒钟内根据您的问题编辑我的问题。@newnewnewbie您用w
打开data
,这会截断它并希望它包含内容?请修复代码示例中的缩进,对于Python来说,如果它看起来是坏的,就不可能说出它应该是什么。也可以考虑通过将代码简化为一个测试用例来简化代码示例,它显示了同样的问题:使用伪数据并且不引用代码>导入< /代码> ED代码,它既不相关也不知道。告诉我如果它对缩进不满意-它对我的样本不满意,所以我看不到任何错误。你可以看看你的实际帖子。它显然已损坏(在def saveGame():
之后的第一行没有缩进,在class StartWindow:
之后的第二个示例也没有缩进),因此至少IDE中的一些缩进没有正确地转移到so问题,这就是为什么我想知道到底什么做了,什么没有做。这可能是因为您认为缩进代码块的第一行就足够了。不是。请修复代码示例中的缩进,对于Python来说,如果它看起来是坏的,就不可能说出它应该是什么。也可以考虑通过将代码简化为一个测试用例来简化代码示例,它显示了同样的问题:使用伪数据并且不引用代码>导入< /代码> ED代码,它既不相关也不知道。告诉我如果它对缩进不满意-它对我的样本不满意,所以我看不到任何错误。你可以看看你的实际帖子。它显然已损坏(在def saveGame():
之后的第一行没有缩进,在class StartWindow:
之后的第二个示例也没有缩进),因此至少IDE中的一些缩进没有正确地转移到so问题,这就是为什么我想知道到底什么做了,什么没有做。这可能是因为您认为缩进代码块的第一行就足够了。事实并非如此。