Python Shelve编写空白列表/字典

Python Shelve编写空白列表/字典,python,python-3.x,dictionary,shelve,Python,Python 3.x,Dictionary,Shelve,我正在尝试制作一个API,在我制作的游戏上创建自定义地图,但shelve只编写空白列表和字典 我尝试这样存储它: 显示的地图名称的名称 name_1表示被视为变量的名称 纹理的文件路径的纹理 风是指所吹的风的大小 这是我的密码: import tkinter.filedialog as tfd import shelve import shutil as os file1 = shelve.open("info") if "written" in file1: pass else:

我正在尝试制作一个API,在我制作的游戏上创建自定义地图,但shelve只编写空白列表和字典

我尝试这样存储它: 显示的地图名称的名称 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()

您需要使用writeback=True打开文件:

从:

由于Python语义的原因,工具架无法知道何时修改可变的持久字典条目。默认情况下,仅当指定给工具架时,才会写入修改的对象。请参见示例。如果可选写回参数设置为True,则访问的所有条目也会缓存在内存中,并在同步和关闭时写回;这可以使在持久性字典中变异可变项变得更容易,但是,如果访问了许多项,它会为缓存消耗大量内存,并且会使关闭操作非常缓慢,因为所有访问的项都被写回,因此无法确定哪些访问的项是可变的,也不知道哪些基因确实发生了变异


您需要使用writeback=True打开文件:

从:

由于Python语义的原因,工具架无法知道何时修改可变的持久字典条目。默认情况下,仅当指定给工具架时,才会写入修改的对象。请参见示例。如果可选写回参数设置为True,则访问的所有条目也会缓存在内存中,并在同步和关闭时写回;这可以使在持久性字典中变异可变项变得更容易,但是,如果访问了许多项,它会为缓存消耗大量内存,并且会使关闭操作非常缓慢,因为所有访问的项都被写回,因此无法确定哪些访问的项是可变的,也不知道哪些基因确实发生了变异

设置键时,shelve将写出对键的更改。它无法检测值的更改。附加到列表或为字典上的键赋值的值将不会被检测到

从:

由于Python语义的原因,工具架无法知道何时修改可变的持久字典条目。默认情况下,仅当指定给工具架时,才会写入修改的对象。请参见示例。如果可选写回参数设置为True,则访问的所有条目也会缓存在内存中,并在同步和关闭时写回;这可以使在持久性字典中变异可变项变得更容易,但是,如果访问了许多项,它会为缓存消耗大量内存,并且会使关闭操作非常缓慢,因为所有访问的项都被写回,因此无法确定哪些访问的项是可变的,也不知道哪些基因确实发生了变异

我的

将writeback参数设置为True并接受以下缺点:

file1 = shelve.open("info", writeback=True)
或显式分配回密钥:

names = file1["name"]
names.append(name)
file1["name"] = names
设置键时,shelve将写出对键的更改。它无法检测值的更改。附加到列表或为字典上的键赋值的值将不会被检测到

从:

由于Python语义的原因,工具架无法知道何时修改可变的持久字典条目。默认情况下,仅当指定给工具架时,才会写入修改的对象。请参见示例。如果可选写回参数设置为True,则访问的所有条目也会缓存在内存中,并在同步和关闭时写回;这可以使在持久性字典中变异可变项变得更容易,但是,如果访问了许多项,它会为缓存消耗大量内存,并且会使关闭操作非常缓慢,因为所有访问的项都被写回,因此无法确定哪些访问的项是可变的,也不知道哪些基因确实发生了变异

我的

将writeback参数设置为True并接受以下缺点:

file1 = shelve.open("info", writeback=True)
或显式分配回密钥:

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

谢谢,我试试看。谢谢,我试试看。