我有這樣一個字典上:寫字典到CSV文件的正確順序
{
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
,我要像
col1;col2;col3
1;4;7
2;5;8
3;6;9
一個csv我試着用for
循環但不要」 t成功以正確的順序寫入數值。
我有這樣一個字典上:寫字典到CSV文件的正確順序
{
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
,我要像
col1;col2;col3
1;4;7
2;5;8
3;6;9
一個csv我試着用for
循環但不要」 t成功以正確的順序寫入數值。
Sth。像這應該工作:
import csv
d = {...}
with open('file.csv', 'wb') as f:
writer = csv.writer(f, delimiter=';')
header = ['col1', 'col2', 'col3']
# header = sorted(d.keys()[, key=custom_order_fnc])
rows = zip(*[d[col] for col in header])
writer.writerow(header)
for row in row:
writer.writerow(row)
內容它給了我一個錯誤消息:'TypeError:'str'不支持緩衝區接口 –
這裏的關鍵是轉變
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
進行的列表:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
我們知道,這種表達會得到列的列表:
header = ['col1', 'col2', 'col3']
[data[h] for h in header] # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
如果我們將它們壓縮一起,那麼我們將得到我們想要的:
zip(*(data[h] for h in header)) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
因此,我們可以將數據寫入CSV文件。全部放在一起:
import csv
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
header = ['col1', 'col2', 'col3']
with open('dict_to_csv_in_order.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(zip(*(data[h] for h in header)))
如果使用pandas,這將是超級容易寫csv文件。
import pandas as pd
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
df = pd.DataFrame(data, columns=['col1', 'col2', 'col3'])
df.to_csv('csv_file.csv', sep=';', index=False)
使用一個'ordereddict',一個'dict's鍵本身沒有以相同的順序排列的按鍵構造,或按鍵進行排序,並遍歷鍵以獲得所需的順序 – EdChum