我已经用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中,对吗?
如果确实如此,我如何进行导入地图,如上所示?我错过了什么吗?
答案 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())