将列表从文件导入lis

2024-10-01 17:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个使用保存文件功能的游戏。我编写了一个函数,将所有必需的变量、字符串、列表和字典保存到一个文件中。总之,当我调用我编写的名为“load()”的函数时,有11件事情需要导入。你知道吗

这里是load():

def load():
    importedData = open("saveGame.dat", "r+").readlines()
    for x in range(0,len(importedData)):
    position = importedData[0]
    health = importedData[1]
    strength = importedData[2]
    exp = importedData[3]
    playerLevel = importedData[4]

    # playerSpells = []
    # spellsFromSaveFile = importedData[5]
    # This doesn't work!

    playerClass = importedData[6]
    seenDialogues = importedData[7]
    rank = importedData[8]
    playerItems = importedData[9]
    itemDesc = importedData[10]
    specialItems = importedData[11]
return position, health, strength, exp, playerLevel, playerSpells, playerClass, seenDialogues, rank, playerItems, itemDesc, specialItems

下面是保存文件的样子:

2
24
4
96
1
['Blink']
None
2
Frajan
[]
{}
{}

大多数字典和列表都将是空白的,因为它们用于游戏后期拾取的项目(这个保存文件是在游戏早期创建的)。你知道吗

虽然我需要导入一些列表和字典,但我将重点介绍其中一个。列表playerSpells在保存文件中另存为['Blink']保存游戏.dat". 你知道吗

以下是我尝试过的:

我已将该列表导入名为playerSpells的列表:

playerSpells = []
playerSpells = importedData[5]
print(playerSpells)

print(playerSpells)返回:

['Blink']

这似乎奏效了,所以我添加了以下循环:

playerSpells = []
playerSpells = importedData[5]
for x in range(0,len(playerSpells)):
    print(playerSpells[x])

但我明白了:

[
'
B
l
i
n
k
'
]

所以,我的问题是:如何将一个列表从一个文件导入到另一个列表中-但要向列表中添加单词,而不是单个字符?

谢谢你的帮助。你知道吗


Tags: 文件函数in游戏列表forlen字典
2条回答

['Blink']作为字符串读取。您可以计算字符串以获得Python列表:

import ast

playerSpells_list = ast.literal_eval(playerSpells)

还有内置的eval()。有关ast更好的解释,请参见this question。你知道吗

使用playerSpells = importedData[5],您在playerSpells变量中存储了一个字符串,而不是一个列表。因为Python不是强类型的,所以它不会抱怨。但是,当您对字符串进行迭代时,每次迭代都会得到一个字符,然后打印出来。你知道吗

最糟糕的是

import ast
playerSpells = ast.literal_eval(importedData[5])

然而,有更好的解决办法。您在这里所做的工作称为反序列化,即将字符串转换回最初从中序列化的数据结构。在Python中有很多方法可以很好地实现这一点。你知道吗

我建议您查看pickle module,它是用Python专门为此任务构建的,或者使用JSON(JavaScript Object Notation的缩写),这是一种普遍接受的存储数据结构的方法,可以很好地用于大多数语言。Python也有一个module来处理它。你知道吗

相关问题 更多 >

    热门问题