[英]How to re-order a csv file without headers in Python?
如何在没有标题的情况下重新订购 CSV。 请注意,CSV 文件有大约 10 万条记录。
CSV 文件示例:
1,$1,AA,GG,DD
2,$2,A1,FD,HH
3,$3,1A,PP,LL
4,$4,1G,LL,SS
预计 output:
DD,GG,1,$1,AA
HH,FD,2,$2,A1
LL,PP,3,$3,1A
SS,LL,4,$4,1G
谢谢你们。 请注意; 我正在使用 Windows
你能试试下面的程序吗? 这将读取输入文件,用逗号将其拆分,重新排序并写入以逗号分隔的 output 文件。
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")
Output
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)}")
我用一个包含1000000
行的示例.csv
文件对此进行了测试,它在大约13
秒内交换了顺序。 我从这里拿走了文件。
这适用于逗号和制表符分隔.csv
文件。 如果您想使用制表符分隔的文件,只需将","
更改为"\t"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.