我最近开始学习一些python。 在完成所有learningpython.org教程之后,我将自己尝试一些东西(所以您知道我的知识水平)。
我想构建一个小的脚本,使您可以构建DnD字符并将其保存在文件中。想法是使用JSON(因为它已包含在learningpython教程中)并按照以下方式放入字典:
data = { playerName ; {"Character Name" : characterName, "Character Class" : characterClass...ect.}}
我希望可以在原始数据dic内的JSON文件中添加新的dic,因此字典是玩家名称列表,其中有字符dic。
我不仅不能完全得到这样的文件,而且在添加以下字典而不使文件不可读的同时,我也失败了。这是我的代码,因为它不是很长:
import json
def dataCollection():
print("Please write your character name:")
characterName = input()
print("%s, a good name! \nNow tell me your race:" % characterName)
characterRace = input()
print("And what about the class?")
characterClass = input()
print("Ok so we have; \nName = %s \nRace = %s \nClass = %s \nPlease tell me the player name now:" % (characterName, characterRace, characterClass))
playerName = input()
print("Nice to meet you %s. \nI will now save your choices..." % playerName)
localData = { playerName :
{"Character Name" : characterName,
"Character Class" : characterClass,
"Character Race" : characterRace}}
with open("%s_data_file.json" % playerName, "a") as write_file:
json.dump(localData, write_file)
dataCollection()
with open("data_file.json", "r") as read_file:
data = json.load(read_file)
# different .json name here since I'm trying around with different files
print(data)
编辑:JSON可能不是我的想法要使用的“正确”东西。如果您有其他替代方法来存储该信息(除了直接的txt文件),请随时提出建议!
答案 0 :(得分:0)
我做了一些修改,如果无法初始化数据,我会尝试读取文件以初始化数据json。
import json
def createPlayer():
print("Please write your character name : ")
characterName = input()
print("%s, a good name! \nNow tell me your race : " % characterName)
characterRace = input()
print("Nice to meet you %s. \nI will now save your choices..." % characterName)
try :
with open('data_file.json') as json_file:
data = json.load(json_file)
except :
data = {}
data['player'] = []
data['player'].append({
'name': characterName,
'race': characterRace,
})
with open("data_file.json", "w+") as write_file:
json.dump(data, write_file)
createPlayer()
with open("data_file.json", "r") as read_file:
data = json.load(read_file)
print(data)
答案 1 :(得分:0)
我认为您对字典的看法可能与实际不符。 字典是一种数据结构,可以容纳许多键值对。
在这里,词典的关键是玩家的名字,而值将是保存角色名称,职业和种族的词典。
由于一个json文件只能容纳1个json对象,因此无法追加包含字典的json文件。
{ 'playerName': {...character\'s attributes...}}
如果您要打开文件并附加一个json对象(就像在dataCollection
末尾那样),那么您的文件将像这样
{ 'playerName':
{...characters attributes...}
}
{ 'playerName2':
{...characters attributes...}
}
当读取文件json
时,它找到的第一个json对象将结束。这样就不会加载第二个字典。
如果要在json文件中的字典中添加某些内容,则需要加载json文件以访问字典,然后添加新的键值对,然后转储此新字典。这将导致以下json文件:
{ 'playerName':
{...characters attributes...},
'playerName2':
{...characters attributes...}
}
我希望这很清楚。