关于如何使用zip合并数据以及转置列表的一些提示。
这听起来像是如何转置csv是你真正的问题。如何转置csv的答案是将其放入列表列表(例如通过csv模块),然后将其转置并写回文件(如果需要)。在row1 = [1,2,3]
row2 = ['a', 'b', 'c']
list(zip(row1, row2))
Out[45]: [(1, 'a'), (2, 'b'), (3, 'c')]
z = list(zip(row1, row2))
list(zip(*z))
Out[47]: [(1, 2, 3), ('a', 'b', 'c')]
y = list(zip(*z))
y
Out[49]: [(1, 2, 3), ('a', 'b', 'c')]
list(zip(*y))
Out[50]: [(1, 'a'), (2, 'b'), (3, 'c')]
或者,如果您安装了numpy或pandas,这两种方法都可以在最多3行代码中使用read_file/transpose_matrix/write_transposed_to_文件
所以根据你的代码,我会读所有的文件,把它们放在内存里,然后再进行转置写。我想如果你改变这一部分,它会成功的(我没有亲自测试)。在
^{pr2}$
如果每个原始文件没有严格的1行,那么将得到有趣的结果。在
更新:
我举了一个小例子。在files = list('abcd')
file_rows = [files]
for filename in [range(i, i+4) for i in range(0, 12, 4)]:
tmp_rows = []
fake_csv = [list(filename)]
for row in fake_csv:
tmp_rows += [row] # change to [row, row] to see what happens
# in case of multiple rows in original csv
file_rows += tmp_rows
transposed = list(zip(*file_rows))
print(transposed)
在完成测试代码之后,我稍微调整了一下原始代码,使其列在列表中,这是唯一的事情。所以,如果你在改变之后仍然得到有趣的结果,那是因为你没有统一的输入数据,在这种情况下,你需要决定如何处理。例如,zip将静默地只输出所有原始行的最短列表的长度。要修复此问题,您需要以代码方式添加到,以便所有列表的长度与最长的行相同。在