0

キーにバインドされた関数があります。この関数は、次のようにファイルに何かを書き込みます。

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

セーブゲームは、特定のキーが押されたときに呼び出されます。新しいファイルを作成し、その中に何かを保存し(ここでは何を保存するかは重要ではありません)、新しいファイルの名前をさらに別のファイルに保存します。

ただし、プログラムを終了して再起動すると、2番目のファイルは空になります。それでも、プログラムが実行されている限り、適切な内容が含まれています。プログラム終了後も内容を残したいです。それは可能ですか?どのように?

あなたの質問に:

ウィンドウを開いてゲームを開始します。

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()

さて、ウィンドウは大丈夫ですが、どういうわけかifclauseが満たされることはなく、手で開いてもmyDataは明らかに空です。何故ですか?

4

2 に答える 2

2

ファイルを明示的に閉じることは決してないので、その内容が実際に書き込まれることはない可能性があります。明示的にsaved.close()使用するか、できればコンテキストマネージャーを使用する必要があります。次に例を示します。

with open(filename, "w") as saved: 
    pickle.dump( lis1,saved, 2)
    try:
        data.write(filename+"\n")
    except Exception as e:
        print e

data読むためだけに開かれている場合でも、同じことを行うことをお勧めします。

于 2013-03-10T22:35:31.273 に答える
2

wプログラムを実行するたびに、フラグが付いたファイルを開いています。これにより、前回の実行で保存されたデータが破棄されます。追加モードを使用します。

于 2013-03-10T23:29:46.213 に答える