我正在使用pygame创建我的第一个'游戏',并且想要添加一个加载文件选项。我的代码是:
file = input('What save file should be opened? ')
file = file + '.txt'
file = open(file, 'r')
tilemap = file.read()
这很好,直到我到达这一行
SCREEN.blit(textures[tilemap[row][column]], (column*TILESIZE, row*TILESIZE))
我得到一个KeyError:'['
这是因为我打开的文件是一个数字列表,但是它作为字符串打开 - 程序将'['作为字符串的一部分读取。我尝试过使用:
tilemap = file.readlines()
但是这会给出一个里面有字符串的列表。我在互联网上看到的一切都是将字符串或整数放入列表中,而不仅仅是打开列表。如何打开列表?
编辑:
文件(.txt)是列表列表,例如:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
答案 0 :(得分:2)
正如您所发现的,somefile.read
返回一个字符串,一个包含表达式。要将表达式转换为所需的结构,必须以某种方式对其进行评估。 GingerPlusPlus提供了两种方法,比使用eval
更安全。举例说明:
import ast, json
data ='[[1, 2, 3], [4, 5, 6], [7, 8, 9]]'
for func in (ast.literal_eval, json.loads):
ob = func(data)
print(type(ob), ob)
打印
<class 'list'> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
<class 'list'> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
对于更复杂的表达式,Python和Javascript(来自JavaScript Object Notation)的确切语法不同。