我有一堆具有相同列但顺序不同的csv文件。我们正在尝试使用SQL * Plus上传它们,但我们需要具有固定列排列的列。
实施例
所需订单:A B C D E F
csv文件:C D E B(有时列不在csv中,因为它不可用)
用python可以实现吗?我们正在使用Access +宏来做这件事......但这太费时了
PS。对不起,如果有人对我的英语技能感到不满。
答案 0 :(得分:18)
您可以使用csv module来阅读,重新排序,然后编写您的文件。
示例文件:
$ cat file.csv
A,B,C,D,E
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
<强>代码强>
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)
<强>输出强>
$ cat reordered.csv
A,C,D,E,B
a1,c1,d1,e1,b1
a2,c2,d2,e2,b2
答案 1 :(得分:6)
因此解决此问题的一种方法是使用pandas
库,可以使用pip
轻松安装。基本上,您可以将csv
文件下载到pandas dataframe,然后重新排序该列并将其保存回csv
文件。例如,如果您的sample.csv
如下所示:
A,C,B,E,D
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
这是一个解决问题的片段。
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)
答案 2 :(得分:1)
csv_in = open("<filename>.csv", "r")
csv_out = open("<filename>.csv", "w")
for line in csv_in:
field_list = line.split(',') # split the line at commas
output_line = ','.join(field_list[0], # rejoin with commas, new order
field_list[2],
field_list[3],
field_list[4],
field_list[1]
)
csv_out.write(output_line)
csv_in.close()
csv_out.close()
答案 3 :(得分:1)
您可以使用与this类似的内容来更改订单,替换“;”在你的情况下用','。 因为您说您需要执行多个.csv文件,所以可以使用glob模块获取文件列表
for file_name in glob.glob('<Insert-your-file-filter-here>*.csv'):
#Do the work here
答案 4 :(得分:1)
csv
模块允许您读取csv文件及其与列名相关联的值。这反过来允许您任意重新排列列,而不必明确地置换列表。
for row in csv.DictReader(open("foo.csv")):
print row["b"], row["a"]
2 1
22 21
鉴于文件 foo.csv :
a,b,d,e,f
1,2,3,4,5
21,22,23,24,25