将txt文件中的文本作为列表中的列表导入,并使用列/行坐标

时间:2016-05-08 21:23:06

标签: python oop text

我已经用Google搜索了,我似乎无法找到符合我要做的事情的解决方案。我想从.txt文件中导入文本作为另一个列表中的列表。例如,如果我有一个看起来像这样的文本文件:

ggggg   
wwggg  
wggtg  
ggggg  
ggggg  

'克' =草,' w' =水和'代表一个小镇。

我导入了这样的地图文件:

tilemap = []
with open('tilemap.txt') as input:
    for line in input:
        tilemap.append(line.strip().split(','))

但我不认为它能归还我想要的东西。我希望它的格式如下:

tilemap = [
    ['g', 'g', 'g', 'g', 'g'],
    ['w', 'w', 'g', 'g', 'g'],
    ['w', 'g', 'g', 't', 'g'],
    ['g', 'g', 'g', 'g', 'g'],
    ['g', 'g', 'g', 'g', 'g']
]

因此我可以使用跟踪用户在超级列表中的位置的类对象来操纵它。:

class WorldSpace(object):
    def __init__(self, row, column):
        self.column = column
        self.row = row
        self.userpos = tilemap[row][column]

world = WorldSpace(0, 0)

如果我要声明WorldSpace变量' userpos'作为tilemap [0] [0],它应该返回第一个' g'在tilemap中,对吗?

如果确实如此,我如何进行导入地图,如上所示?我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

我认为你对.split(",")的作用感到困惑,它会被参数中的字符分开:

>>> "ggg".split(",") #no commas to split by.
['ggg']
>>> "g,g,g".split(",") #works when it is seperated by commas
['g', 'g', 'g']

在您的情况下,您只想将该行投射到list,这样您就可以将line.strip().split(",")更改为list(line.strip()),但我建议您使用列表理解:

with open('tilemap.txt') as input:
    tilemap = [list(line.strip()) for line in input]

答案 1 :(得分:3)

您正在用逗号分隔字符串,但在示例文本文件中,没有逗号分隔字符。尝试:

tilemap = []
with open('tilemap.txt') as input:
    for line in input:
        tilemap.append(list(line.strip())