2017-01-15 38 views
0

我想製作一個API來創建我製作的遊戲上的自定義地圖,但擱置只是寫空白列表和字典。Shelve寫空白列表/ dictionarys

我嘗試將它保存這樣的: 「名稱」爲地圖 「NAME_1」的名稱被視爲變量 「紋理」的紋理 「風」爲文件路徑的顯示名稱

import tkinter.filedialog as tfd 
import shelve 
import shutil as os 

file1 = shelve.open("info") 

if "written" in file1: 
    pass 
else: 
    file1["name"] = [] 
    file1["name_1"] = [] 
    file1["textures"] = {} 
    file1["wind"] = {} 
    file1.close() 
    file1 = shelve.open("info") 

name = input("Name: ") 

name1 = input("Name zur Variablenspeicherung: ") 

wind = input("Wind (*-*): ") 

print("Wähle eine 1200x820 GIF-Datei als Hintergrund aus") 
texture = tfd.askopenfilename() 
os.copy(texture,"textures/"+texture.split("/")[-1].split("\\")[-1]) 
texture = "custom/textures/"+texture.split("/")[-1].split("\\")[-1] 

print("Schreibe Datei...") 

file1["name"].append(name) 
file1["name_1"].append(name1) 
file1["textures"][name1] = texture 
file1["wind"][name1] = [int(wind.split("-")[0]),int(wind.split("-")[1])] 
file1["written"] = 1 

file1.close() 

回答

1

你需要打開你的文件,writeback=True::那是吹

繼承人我的代碼風量

file1 = shelve.open("info", writeback=True) 

docs

因爲Python的語義,當可變持久字典項被修改的架子不知道。默認情況下,修改後的對象僅在分配給貨架時才寫入(請參閱示例)。 如果可選writeback參數設置爲True,則所有訪問的條目也會緩存在內存中,並寫回sync()close();這可以使更改持久性字典中的可變條目更容易,但是,如果訪問了很多條目,它可能會消耗大量的緩存內存,並且它可以使關閉操作非常緩慢,因爲所有訪問的條目都被寫回(沒有辦法確定哪些訪問條目是可變的,哪些實際上是變異的)。

+0

謝謝,我會盡力的。 – Jerrynicki

1

shelve將寫出修改鍵,當你設置鍵。它無法檢測到值的更改。追加到列表或分配給值爲的字典上的密鑰將不會被檢測到。

shelve documentation:當一個可變的持久字典詞條被修改

因爲Python的語義,架子不知道。默認情況下,修改後的對象僅在分配給貨架時才寫入(請參閱示例)。如果可選writeback參數設置爲True,則所有訪問的條目也會緩存在內存中,並寫回sync()close();這可以更容易地修改持久性字典中的可變條目,但是,如果訪問了很多條目,它可能會消耗大量的緩存內存,並且它可以使關閉操作非常緩慢,因爲所有訪問的條目都被寫回(沒有辦法確定哪些訪問條目是可變的,哪些實際上是變異的)。

大膽強調我的。

要麼設置writeback參數True(並接受缺點):

file1 = shelve.open("info", writeback=True) 

或分配回明確的關鍵:

names = file1["name"] 
names.append(name) 
file1["name"] = names