-1

如何重新排序没有标题的 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

4

2 回答 2

1

你可以试试下面的程序。这将读取输入文件,用逗号分割,重新排序并写入用逗号分隔的输出文件。

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

于 2020-09-21T16:39:56.273 回答
1

我已经对您的问题进行了一些处理,这就是我想出的:

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"

于 2020-09-22T09:42:48.273 回答