读取文本文件并将其分配给 Python 中的变量
Reading text file and assigning it to a variable in Python
我正在尝试读取具有以下结构的文本文件:
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] ] ]
在此先感谢您的帮助。
您可以尝试以下方法:
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]]]
您需要编写一个简单的解析器:
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())))
我正在尝试读取具有以下结构的文本文件:
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] ] ]
在此先感谢您的帮助。
您可以尝试以下方法:
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]]]
您需要编写一个简单的解析器:
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())))