python保留输出csv文件列顺序

时间:2016-10-12 08:27:19

标签: python csv

这个问题很常见,当我导入一个csv文件并对其进行处理并最终输出时,输出csv文件中列的顺序可能与原始文件不同,例如:

dct={}
dct['a']=[1,2,3,4]
dct['b']=[5,6,7,8]
dct['c']=[9,10,11,12]

header = dct.keys()
rows=pd.DataFrame(dct).to_dict('records')

with open('outTest.csv', 'wb') as f:
    f.write(','.join(header))
    f.write('\n')
    for data in rows:
        f.write(",".join(str(data[h]) for h in header))
        f.write('\n')

原始csv文件如:

a,c,b
1,9,5
2,10,6
3,11,7
4,12,8

虽然我想修改列的顺序,如输出:

a,b,c
1,5,9
2,6,10
3,7,11
4,8,12

我找到的答案主要与pandas有关,我想知道我们是否可以用另一种方式解决这个问题。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

而不是dct={}只需执行此操作:

from collections import OrderedDict
dct = OrderedDict()

按键将按您定义的顺序排序。

对比测试:

from collections import OrderedDict
dct = OrderedDict()
dct['a']=[1,2,3,4]
dct['b']=[5,6,7,8]
dct['c']=[9,10,11,12]

stddct = dict(dct)  # create a standard dictionary

print(stddct.keys())  # "wrong" order
print(dct.keys())     # deterministic order

结果:

['a', 'c', 'b']
['a', 'b', 'c']

答案 1 :(得分:1)

尝试使用OrderedDict代替dictionaryOrderedDictcollections模块的一部分。

文档:link