pythoncsv格式列变换_用Python将csv行转换为列
關(guān)于如何使用zip合并數(shù)據(jù)以及轉(zhuǎn)置列表的一些提示。
這聽起來像是如何轉(zhuǎn)置csv是你真正的問題。如何轉(zhuǎn)置csv的答案是將其放入列表列表(例如通過csv模塊),然后將其轉(zhuǎn)置并寫回文件(如果需要)。在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_文件
所以根據(jù)你的代碼,我會讀所有的文件,把它們放在內(nèi)存里,然后再進(jìn)行轉(zhuǎn)置寫。我想如果你改變這一部分,它會成功的(我沒有親自測試)。在
^{pr2}$
如果每個(gè)原始文件沒有嚴(yán)格的1行,那么將得到有趣的結(jié)果。在
更新:
我舉了一個(gè)小例子。在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)
在完成測試代碼之后,我稍微調(diào)整了一下原始代碼,使其列在列表中,這是唯一的事情。所以,如果你在改變之后仍然得到有趣的結(jié)果,那是因?yàn)槟銢]有統(tǒng)一的輸入數(shù)據(jù),在這種情況下,你需要決定如何處理。例如,zip將靜默地只輸出所有原始行的最短列表的長度。要修復(fù)此問題,您需要以代碼方式添加到,以便所有列表的長度與最長的行相同。在
總結(jié)
以上是生活随笔為你收集整理的pythoncsv格式列变换_用Python将csv行转换为列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机桌面设置定时,如何设置可以每月自动
- 下一篇: websocket python爬虫_p