在Python中将文本文件读入2d列表,而不删除空格

时间:2015-12-07 05:14:04

标签: python

所以我正在为一所学校的项目工作,我们将获得一个类似于此处所示的文本文件:

    with open(fileName) as f:
        grid = f.read().split("/n")

我遇到的问题是将文本读取到2D列表。每当我尝试它时,要么创建一个非常长的字符串列表,如下所示:

此代码:

['+---+-----+-----+\n|   |     |     |\n|   |     |     |\n|   |     +=====+\n+---+     |  |  |\n|   |     |  |  |\n|   +-+   +=====+\n|   | |   |     |\n|   | +-+ |     |\n|   |   | |     |\n|   |   +-+     |\n|   |     |_____|\n|   |     |     |\n+---+-----+-----+']

给出这个输出:

with open(fileName) as f:
    grid = f.read().split()

或删除空格的地方:

这段代码:

['+---+-----+-----+', '|', '|', '|', '|', '|', '|', '|', '|', '|', '|', '+=====+', '+---+', '|', '|', '|', '|', '|', '|', '|', '|', '|', '+-+', '+=====+', '|', '|', '|', '|', '|', '|', '|', '+-+', '|', '|', '|', '|', '|', '|', '|', '|', '|', '+-+', '|', '|', '|', '|_____|', '|', '|', '|', '|', '+---+-----+-----+']

给出这个:

[['+','-','-','-','+','-','-','-','-','-','+','-','-','-','-','-','+']
['|',' ',' ',' ','|',' ',' ',' ',' ',' ','|',' ',' ',' ',' ',' ','+']
['|',' ',' ',' ','|',' ',' ',' ',' ',' ','|',' ',' ',' ',' ',' ','+']
.... etc

我需要的是一个包含每个字符的2D列表,(是的,偶数空格),以便我可以稍后操作每个字符。这就是我正在寻找的:

{{1}}

很抱歉,如果这很容易,我对编程很新。此外,我在这里查看了其他问题,无法找到与我需要的相似的内容,如果已经回答,请提前抱歉。

3 个答案:

答案 0 :(得分:1)

喜欢这个吗?

>>> with open('file') as f:
...     lines = f.read().splitlines()

>>> [list(i) for i in lines]
[['+', '-', '-', '-', '+', '-', '-', '-', '-', '-', '+', '-', '-', '-', '-', '-', '+'],
 ['|', ' ', ' ', ' ', '|', ' ', ' ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', ' | '],
 [' | ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', ' | '],
 [' | ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', '+', ' = ', ' = ', ' = ', ' = ', ' = ', '+'],
 ['+', '-', '-', '-', '+', ' ', ' ', ' ', ' ', ' ', ' | ', ' ', ' ', ' |', ' ', ' ', '|'],
 ['|', ' ', ' ', ' ', '|', ' ', ' ', ' ', ' ', ' ', '|', ' ', ' ', '|', ' ', ' ', '|'],
 ['|', ' ', ' ', ' ', '+', '-', '+', ' ', ' ', ' ', '+', ' = ', ' = ', ' = ', ' = ', ' = ', '+'],
 [' | ', ' ', ' ', ' ', ' | ', ' ', ' | ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', ' | '],
 [' | ', ' ', ' ', ' ', ' | ', ' ', '+', '-', '+', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', ' | '],
 [' | ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' | ', ' ', ' |', ' ', ' ', ' ', ' ', ' ', '|'],
 ['|', ' ', ' ', ' ', '|', ' ', ' ', ' ', '+', '-', '+', ' ', ' ', ' ', ' ', ' ', '|'],
 ['|', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', ' | ', '_', '_', '_', '_', '_', ' | '],
 [' | ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', ' | ', ' ', ' ', ' ', ' ', ' ', '|'],
 ['+', '-', '-', '-', '+', '-', '-', '-', '-', '-', '+', '-', '-', '-', '-', '-', '+']]

答案 1 :(得分:0)

鉴于这是一个学校项目,我故意避免发布完整的解决方案,所以这里有一些提示应该足以弄明白:

  • "/n"不是换行符。研究输出字符串以查看换行符。这样,你就分裂了一些在字符串中找不到的东西,它为你提供了一个单元素的数组。

  • .split()分裂所有空格。不是你想要的。第一次尝试更好,但见上文。

  • 将文件拆分为行时,需要将每行拆分为字符。 list(line)会为一行做到这一点。研究列表推导或map函数,以找出如何在拆分结果中的每一行应用list

答案 2 :(得分:0)

逐行阅读,如下:

for line in f:
    print(line)

您可能不需要从字符串创建列表,因为您可以直接在字符串上使用index []。