如何重新排序没有标题的 CSV。请注意,CSV 文件有大约 10 万条记录。
CSV 文件示例:
1,$1,AA,GG,DD
2,$2,A1,FD,HH
3,$3,1A,PP,LL
4,$4,1G,LL,SS
预期输出:
DD,GG,1,$1,AA
HH,FD,2,$2,A1
LL,PP,3,$3,1A
SS,LL,4,$4,1G
谢谢你们。请注意; 我使用 Windows
你可以试试下面的程序。这将读取输入文件,用逗号分割,重新排序并写入用逗号分隔的输出文件。
with open("input.csv","r") as f, open("output.csv","w") as f1:
for line in f:
cols=line.strip().split(",")
f1.write(",".join([cols[4],cols[3]]+cols[:3])+"\n")
输出
DD,GG,1,$1,AA
HH,FD,2,$2,A1
LL,PP,3,$3,1A
SS,LL,4,$4,1G
我已经对您的问题进行了一些处理,这就是我想出的:
import csv
import time
traget_file = "1000000_Sales_Records.csv"
output_file = "swapped.csv"
new_order = [5, 4, 1, 2, 3, 6, 9, 7, 10, 8, 13, 11, 12]
delim = ","
def read_data(filename: str, delim: str):
with open(filename) as csvfile:
datareader = csv.reader(csvfile, delimiter=delim)
next(datareader, None) # skip header
for row in datareader:
yield row
def swapper(file, order):
for row in read_data(file, delim):
yield [row[index - 1] for index in order]
with open(output_file, "a") as nf:
w = csv.writer(nf)
s = time.time()
for new_row in swapper(traget_file, new_order):
w.writerow(new_row)
e = time.time()
print(f"Done in {round((e - s) / 60, 2)}")
我已经用一个.csv带有行的示例文件对此进行了测试,它在大约几秒钟内1000000交换了顺序。13我从这里拿了文件。
这适用于逗号和制表符分隔的.csv文件。如果您想使用制表符分隔的文件,只需更改为","。"\t"