Python - 在csv中重新排序列

JJ1*_*603 19 python csv

我有一堆具有相同列但顺序不同的csv文件.我们正在尝试使用SQL*Plus上传它们,但我们需要具有固定列排列的列.

所需订单:ABCDEF

csv文件:ACDEB(有时列不在csv中,因为它不可用)

用python可以实现吗?我们正在使用Access +宏来完成它......但它太耗时了

PS.对不起,如果有人对我的英语技能感到不满

Jos*_*h J 22

您可以使用csv模块读取,重新排序,然后编写文件.

示例文件:

$ cat file.csv
A,B,C,D,E
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
Run Code Online (Sandbox Code Playgroud)

import csv

with open('file.csv', 'r') as infile, open('reordered.csv', 'a') as outfile:
    # output dict needs a list for new column ordering
    fieldnames = ['A', 'C', 'D', 'E', 'B']
    writer = csv.DictWriter(outfile, fieldnames=fieldnames)
    # reorder the header first
    writer.writeheader()
    for row in csv.DictReader(infile):
        # writes the reordered rows to the new file
        writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)

产量

$ cat reordered.csv
A,C,D,E,B
a1,c1,d1,e1,b1
a2,c2,d2,e2,b2
Run Code Online (Sandbox Code Playgroud)


tit*_*ata 7

因此,解决此问题的一种方法是使用pandas可以轻松安装的库pip.基本上,您可以将csv文件下载到pandas dataframe,然后重新排序列并将其保存回csv文件.例如,如果您的sample.csv外观如下:

A,C,B,E,D                                                                                                                
a1,b1,c1,d1,e1                                                                                                           
a2,b2,c2,d2,e2 
Run Code Online (Sandbox Code Playgroud)

这是解决问题的片段.

import pandas as pd
df = pd.read_csv('/path/to/sample.csv')
df_reorder = df[['A', 'B', 'C', 'D', 'E']] # rearrange column here
df_reorder.to_csv('/path/to/sample_reorder.csv', index=False)
Run Code Online (Sandbox Code Playgroud)