接收输入文件并将其作为2D列表存储在Python中?

时间:2015-11-30 00:15:41

标签: python

我的程序需要包含一个包含“board”的.dat或.txt文件,我需要读入并将该板存储在2D列表中。

董事会的示例文本文件:

+---+-----+
|   |     |
|   |=====|
|   |     |
+---+-----+

我的问题是,如何将此文件转换为2D列表,以便我可以使用特定符号填充空白。就像在MS Paint中自动填充一样。

2 个答案:

答案 0 :(得分:1)

如果将字符串传递给list函数,它将获取字符串中的每个字符,并使其成为列表的单独元素:

>>> list('hello')
['h', 'e', 'l', 'l', 'o']

列表推导是一种创建列表的方法,同时迭代某些序列以创建列表的元素:

>>> [x * 2 for x in range(1, 5)]
[2, 4, 6, 8]

为了演示我们将使用两个有用的Python工具StringIOpprintStringIO允许我们定义类文件对象的内容,因此我们可以在不实际创建文件的情况下测试代码。 pprint漂亮的版画,其中包括lists,以便它们适合屏幕。

我们可以根据换行符分割StringIO内容,' \ n':

>>> from StringIO import StringIO
>>> from pprint import pprint

>>> contents = StringIO("""+---+-----+
... |   |     |
... |   |=====|
... |   |     |
... +---+-----+""")

>>> matrix = [list(line.strip()) for line in contents]
>>> pprint(matrix)
[['+', '-', '-', '-', '+', '-', '-', '-', '-', '-', '+'],
 ['|', ' ', ' ', ' ', '|', ' ', ' ', ' ', ' ', ' ', '|'],
 ['|', ' ', ' ', ' ', '|', '=', '=', '=', '=', '=', '|'],
 ['|', ' ', ' ', ' ', '|', ' ', ' ', ' ', ' ', ' ', '|'],
 ['+', '-', '-', '-', '+', '-', '-', '-', '-', '-', '+']]

答案 1 :(得分:0)

文件是可迭代的对象,可以产生它们的行。所以你需要做的就是:

strlist = list(fp)

如果您需要列表中单独项目中的每个字符,那么使用列表推导将每行填充到列表中(因此,您将拥有单个字符列表的列表):

strlist = [list(line) for line in fp]

如果您需要剥离新行:

strlist = [list(line.rstrip('\n')) for line in fp]

当然,这假设您已经使用以下命令打开了文件:

fp = open(filepath, mode='rb')

<强>更新

以下是一个完整的例子:

with open('/path/to/my/board.txt', mode='rb') as fp:
    strlist = [list(line.rstrip('\n')) for line in fp]

# What is in the top left corner of the grid.
print(strlist[0][0])