Python: 在 shelf 中声明多个键的最佳方式
Python: Best way to declare more than one keys in a shelf
背景:我正在尝试上架python,想做一个最基本的程序来尝试一下方法
我写了这段代码:
#creates a shelf, with 3 set keys and 3 input values 然后打印它
import shelve
settings_shelf = shelve.open('TempData')
settings_shelf['volume'] = input()
settings_shelf['graphics'] = input()
settings_shelf['auto-save'] = input()
print(list(settings_shelf.keys())+ list(" ") + list(settings_shelf.values()))
settings_shelf.close()
有没有更好的格式化方法?而不是输入 3 行?
我发现了这个:Any way to use a tuple as key in a shelf? (Python) 但我并没有真正理解答案..
我试过 settings_shelf['volume','graphics'] = input(),input()
但它抛出了这个错误:即使它接受两个输入 Traceback(最近一次调用最后一次):
File "C:\Users\Simone\dev\Automate The Boring Stuff with
Python\shelves.py", line 5, in
settings_shelf['volume','graphics'] = input(),input() File "C:\Users\Simone\AppData\Local\Programs\Python\Python310\lib\shelve.py",
line 125, in setitem
self.dict[key.encode(self.keyencoding)] = f.getvalue() AttributeError: 'tuple' object has no attribute 'encode'
我尝试添加 print(tuple(xyz)) 但仍然无效。
另外.. 是否可以写类似 settings_shelf[input() = input() 的东西?
我也试过了但是它弄乱了最终结果它切换了最后一个键和值
来自 shelve 文档:
The keys are ordinary strings.
因此您需要将元组转换为字符串,如果需要,稍后再将其转换回来。
使用列表和 json
模块并不容易
示例如下:
import json
import shelve
settings_shelf = shelve.open('TempData')
obj = {
'volume': 123,
'graphics': 456,
'auto-save': True,
}
folder, name = 'some', 'obj'
# Convert list to string
obj_key = json.dumps([folder, name])
print(obj_key)
# => '["some", "obj"]'
settings_shelf[obj_key] = obj
print(settings_shelf[obj_key])
# => {'volume': 123, 'graphics': 456, 'auto-save': True}
# Convert string back to objects
folder, name = json.loads(obj_key)
print(folder, name)
# => 'some obj'
背景:我正在尝试上架python,想做一个最基本的程序来尝试一下方法
我写了这段代码:
#creates a shelf, with 3 set keys and 3 input values 然后打印它
import shelve
settings_shelf = shelve.open('TempData')
settings_shelf['volume'] = input()
settings_shelf['graphics'] = input()
settings_shelf['auto-save'] = input()
print(list(settings_shelf.keys())+ list(" ") + list(settings_shelf.values()))
settings_shelf.close()
有没有更好的格式化方法?而不是输入 3 行? 我发现了这个:Any way to use a tuple as key in a shelf? (Python) 但我并没有真正理解答案..
我试过 settings_shelf['volume','graphics'] = input(),input()
但它抛出了这个错误:即使它接受两个输入 Traceback(最近一次调用最后一次):
File "C:\Users\Simone\dev\Automate The Boring Stuff with Python\shelves.py", line 5, in settings_shelf['volume','graphics'] = input(),input() File "C:\Users\Simone\AppData\Local\Programs\Python\Python310\lib\shelve.py", line 125, in setitem self.dict[key.encode(self.keyencoding)] = f.getvalue() AttributeError: 'tuple' object has no attribute 'encode'
我尝试添加 print(tuple(xyz)) 但仍然无效。
另外.. 是否可以写类似 settings_shelf[input() = input() 的东西? 我也试过了但是它弄乱了最终结果它切换了最后一个键和值
来自 shelve 文档:
The keys are ordinary strings.
因此您需要将元组转换为字符串,如果需要,稍后再将其转换回来。
使用列表和 json
模块并不容易
示例如下:
import json
import shelve
settings_shelf = shelve.open('TempData')
obj = {
'volume': 123,
'graphics': 456,
'auto-save': True,
}
folder, name = 'some', 'obj'
# Convert list to string
obj_key = json.dumps([folder, name])
print(obj_key)
# => '["some", "obj"]'
settings_shelf[obj_key] = obj
print(settings_shelf[obj_key])
# => {'volume': 123, 'graphics': 456, 'auto-save': True}
# Convert string back to objects
folder, name = json.loads(obj_key)
print(folder, name)
# => 'some obj'