2016-10-12 6 views
0

Проблема распространена, когда я импортирую файл csv и обрабатываю его и, наконец, вывожу его, порядок столбца в выходном файле csv может отличаться от исходного, например:python save output output csv file column order

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, интересно, можем ли мы решить это по-другому.

Любая помощь приветствуется, спасибо.

ответ

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'] 
+0

Спасибо за вашу помощь, это хорошо работает с моим вопросом – LancelotHolmes

1

Попробуйте использовать OrderedDict вместо dictionary. OrderedDict является частью модуля collections.

Docs: link