-1

我正在尝试读取具有以下结构的文本文件:

BUS 0   
0   1   2   3   
0   4   1   9   2   3   
BUS 1  
0   1   9   2   3   
0   1   2   3   
0   1   2   3   

它基本上是一个 3D 列表,其中嵌套的 2D 列表是列数和行数不相等的矩阵。第一个索引由字符串“BUS”表示,后跟一个数字。接下来的行对应于一个二维列表,每一行都是一个列表,直到下一个“BUS”字符串。我需要将此文本文件中的数字分配给 Python 中的 3D 列表。上面给出的示例应转换为:

[ [ [0,1,2,3],[0,4,1,9,2,3] ], [ [0,1,9,2,3],[0,1,2,3], [0,1,2,3] ] ]

提前感谢您的帮助。

4

2 回答 2

0

您可以尝试以下方法:

data = []

with open("file.wtv") as file_in:
    for line in file_in:
        try:
            row = [*map(int, line.strip().split())]
            data[-1].append(row)
        except ValueError:
            data.append([])

data
# [[[0, 1, 2, 3], [0, 4, 1, 9, 2, 3]], 
#  [[0, 1, 9, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]]
于 2021-10-26T15:45:58.643 回答
0

您需要编写一个简单的解析器:

test = '''BUS 0
0 1 2 3
0 4 1 9 2 3
BUS 1
0 1 9 2 3
0 1 2 3
0 1 2 3'''

out = []
for line in test.split('\n'):
    if line.startswith('BUS'):
        out.append([])
    else:
        out[-1].append(list(map(int, line.split())))

输出:

[[[0, 1, 2, 3], [0, 4, 1, 9, 2, 3]],
 [[0, 1, 9, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]]

从一个文件:

with open('file.txt') as f:
    out = []
    for line in f:
        if line.startswith('BUS'):
            out.append([])
        else:
            out[-1].append(list(map(int, line.split()))) 
于 2021-10-26T15:46:46.470 回答