Python 将列表从文件导入到列表中

Python 将列表从文件导入到列表中,python,python-3.x,Python,Python 3.x,我正在用Python编写一个使用保存文件功能的游戏。我编写了一个函数,将所有必需的变量、字符串、列表和字典保存到一个文件中。总之,当我调用我编写的名为“load()”的函数时,有11件事情需要导入 这是load(): 下面是保存文件的外观: 2 24 4 96 1 ['Blink'] None 2 Frajan [] {} {} 大多数字典和列表都是空白的,因为它们用于游戏后期拾取的项目(此保存文件是在游戏早期创建的) 虽然我需要导入一些列表和字典,但我将重点介绍其中的一个。列表player

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

这是load():


下面是保存文件的外观:

2
24
4
96
1
['Blink']
None
2
Frajan
[]
{}
{}
大多数字典和列表都是空白的,因为它们用于游戏后期拾取的项目(此保存文件是在游戏早期创建的)

虽然我需要导入一些列表和字典,但我将重点介绍其中的一个。列表
playerSpells
保存为保存文件“saveGame.dat”中的
['Blink']

以下是我尝试过的:

我已将该列表导入名为
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
'
]
所以,我的问题是:我该如何将一个列表从一个文件导入到另一个列表中——但向列表中添加单词,而不是单个字符


感谢您的帮助。

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

import ast

playerSpells_list = ast.literal_eval(playerSpells)

还有内置的
eval()
。有关为什么
ast
更好的解释,请参阅。

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

import ast

playerSpells_list = ast.literal_eval(playerSpells)

还有内置的
eval()
。有关为什么
ast
更好的解释,请参阅。

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

最糟糕的解决方法是使用

import ast
playerSpells = ast.literal_eval(importedData[5])
然而,有更好的解决办法。这里所做的工作称为反序列化,即将字符串转换回最初从中序列化的数据结构。在Python中有很多方法可以很好地实现这一点


我建议您查看,它是用Python专门为此任务构建的,或者使用JSON(JavaScript对象表示法的缩写),这是一种普遍接受的存储数据结构的方法,可以很好地用于大多数语言。Python也需要处理它。

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

最糟糕的解决方法是使用

import ast
playerSpells = ast.literal_eval(importedData[5])
然而,有更好的解决办法。这里所做的工作称为反序列化,即将字符串转换回最初从中序列化的数据结构。在Python中有很多方法可以很好地实现这一点


我建议您查看,它是用Python专门为此任务构建的,或者使用JSON(JavaScript对象表示法的缩写),这是一种普遍接受的存储数据结构的方法,可以很好地用于大多数语言。Python也有一个解决方法。

工作起来很有魅力。非常感谢你!我会尽快接受答案的。这很有魅力。非常感谢你!我会尽快接受答案。你最好使用例如保存实际对象,而不是将它们全部作为文本表示形式写出来。唯一的缺点是该文件不可读。@jonrsharpe我读过关于pickle的文章,并考虑过使用它,但目前我正在修复保存文件的错误,它们需要可读,这样我就可以调整了!如果我对它们进行排序,我可以使用
pickle
。您也可以使用JSON。像pickle和humanreadable这样的作品。当然,可以用其他语言阅读,这很公平。看起来你真的可以用一个类来存储所有这些相关变量,你也可以使用
pickle
来存储和重新创建。你最好使用例如来保存实际对象,而不是将它们全部写出来作为文本表示。唯一的缺点是该文件不可读。@jonrsharpe我读过关于pickle的文章,并考虑过使用它,但目前我正在修复保存文件的错误,它们需要可读,这样我就可以调整了!如果我对它们进行排序,我可以使用
pickle
。您也可以使用JSON。像pickle和humanreadable这样的作品。当然,可以用其他语言阅读,这很公平。看起来您真的可以使用一个类来存储所有这些相关变量,您还可以使用
pickle
来存储和重新创建这些变量。