我的程序需要包含一个包含“board”的.dat或.txt文件,我需要读入并将该板存储在2D列表中。
董事会的示例文本文件:
+---+-----+
| | |
| |=====|
| | |
+---+-----+
我的问题是,如何将此文件转换为2D列表,以便我可以使用特定符号填充空白。就像在MS Paint中自动填充一样。
答案 0 :(得分:1)
如果将字符串传递给list
函数,它将获取字符串中的每个字符,并使其成为列表的单独元素:
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
列表推导是一种创建列表的方法,同时迭代某些序列以创建列表的元素:
>>> [x * 2 for x in range(1, 5)]
[2, 4, 6, 8]
为了演示我们将使用两个有用的Python工具StringIO
和pprint
。 StringIO
允许我们定义类文件对象的内容,因此我们可以在不实际创建文件的情况下测试代码。 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])