从文件中打开列表

时间:2016-01-31 13:37:15

标签: python list file python-3.x pygame

我正在使用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]]

1 个答案:

答案 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)的确切语法不同。