繁体   English   中英

如何在 Python 中重新排序没有标题的 csv 文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM