将文件列表导入列表

时间:2015-05-30 11:27:12

标签: python python-3.x

我在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']," saveGame.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
'
]

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

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

['Blink']被读作字符串。您可以评估字符串以获取Python列表:

import ast

playerSpells_list = ast.literal_eval(playerSpells)

还有内置的eval()。有关ast更好的原因,请参阅this question

答案 1 :(得分:2)

使用playerSpells = importedData[5],您在playerSpells变量中存储了一个字符串,而不是列表。由于Python没有强类型,因此不会抱怨。但是,当您遍历字符串时,每次迭代都会得到一个字符,然后打印出来。

对此的肮脏修复是使用

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

然而,有更好的解决方案。你在这里做的是被称为反序列化,即将字符串转换回最初序列化的数据结构。有很多方法可以在Python中很好地完成这项工作。

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