如何将txt文件转换为每个char的2d数组

时间:2018-04-23 14:32:02

标签: python

我正在尝试阅读我创建的文本文件,如下所示:

  

small.txt

%%%%%%%%%%%%%%%%%%%%%%%
%eeeeeee%eeeee%eeeee%G%
%%%e%e%%%%%e%e%%%e%e%e%
%e%e%eeeeeee%eee%e%eee%
%e%e%e%e%%%e%%%e%e%%%e%
%eeeee%eee%eeeeeeeee%e%
%e%%%e%e%e%e%e%e%%%%%e%
%e%e%eee%e%e%eeeeeee%e%
%e%e%e%%%e%%%%%e%e%%%e%
%Pee%eeeeeeeee%e%eeeee%
%%%%%%%%%%%%%%%%%%%%%%%

我想在特定情况下创建一个2D数组board[21][11]。 我希望每个char都在一个单元格中,因为我想实现BFS和其他算法来达到特定的路径,这是一种Pa​​cman游戏。

这是我的代码:

f = open("small.txt", "r")


output_list = []
for rec in f:
    chars = rec.split()
    print chars     

inner_list = []
for each in chars:
    inner_list.append(each)
    output_list.append(inner_list)

print output_list

如您所见,我现在得到的输出是[[%%%%%%%%%%%%%%%%%%%%%%%]]

3 个答案:

答案 0 :(得分:2)

你可以这样做:

with open('small.txt') as f:
    board = f.readlines()

file.readlines()方法将返回一个字符串列表,您可以将其用作2D数组:

board[1][5]
>>> 'e'

请注意,使用此方法时,换行符('\n')将放在最后一个索引的每一行中。要摆脱它们,您可以使用str.rstrip

board = [row.rstrip('\n') for row in board]

答案 1 :(得分:1)

正如另一个答案所指出的那样,行字符串已经可以按整数索引,但是如果你真的想要一个列表列表:

array = [list(line.strip()) for line in f]

删除行结尾并将每个字符串转换为列表。

答案 2 :(得分:0)

您的代码存在一些问题:

  • 您尝试使用split将行拆分为字符列表,但这只会在空格处拆分
  • 假设您的缩进是正确的,您只会在第二个循环中处理chars的最后一个值
  • 第二个循环只是将chars中的每个(未分割的)行(由于前一个问题只是最后一个)包装成一个列表

相反,您只需将str转换为list ...

即可
>>> list("abcde")
['a', 'b', 'c', 'd', 'e']

...并直接将这些内容放入output_list。另外,请勿忘记strip {/ 1}} \n

f = open("small.txt", "r")
output_list = []
for rec in f:
    chars = list(rec.strip())
    output_list.append(chars)

或使用with进行自动关闭和列表理解:

with open("small.txt") as f:
    output_list = [list(line.strip()) for line in f]

但是,请注意,您不希望更改该网格中的值,您根本不必转换为字符列表列表;字符串列表也可以正常工作。

    output_list = list(map(str.strip, f))