您可以使用以下方法将整个文件的内容拆分为列表:
def read_data(filename):
with open(filename) as f:
return f.read().split()
data = read_data('test.txt')
使用text.txt
包含以下内容的运行:
10
20
30
e
11
21
31
e
12
22
32
将导致:
data = ['10', '20', '30', 'e', '11', '21', '31', 'e', '12', '22', '32']
注意:test.txt
可以以任何方式格式化空格、制表符和换行符,以split()
正确处理它们!
数据实际上应该位于不包含“e”条目的二维数组中。这可以使用以下方法完成:
def list_to_grid(data):
ret = []
line = []
for entry in data:
if entry == 'e':
if len(line) != 0:
ret.append(line)
line = []
else:
line.append(int(entry))
if len(line) != 0:
ret.append(line)
return ret
注意:我确信有一种更 Pythonic 的方法可以做到这一点,但它确实有效。
data = list_to_grid(read_data('test.txt'))
在文件上运行text.txt
将导致:
data = [[10, 20, 30], [11, 21, 31], [12, 22, 32]]
你正在做的是转置二维数组。也就是说,给定data[i][j]
,它有新的位置data[j][i]
。现在可以转置这些数据以获得所需的序列:
def transpose(data):
ret = []
for i in range(0, len(data)):
ret.append([data[j][i] for j in range(0, len(data[i]))])
return ret
哪个tdata = transpose(data)
给出:
data = [[10, 20, 30], [11, 21, 31], [12, 22, 32]]
tdata = [[10, 11, 12], [20, 21, 22], [30, 31, 32]]
现在打印出来:
def print_data(data):
for line in data:
print ' '.join([str(x) for x in line])
使用print_data(tdata)
结果:
10 11 12
20 21 22
30 31 32
这就是你想要的。