gpt4 book ai didi

python - 在python中修改同一目录中的多个.csv文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:16 25 4
gpt4 key购买 nike

我需要修改目录中的多个 .csv 文件。可以用一个简单的脚本来完成吗?我的 .csv 列按以下顺序排列:

 X_center,Y_center,X_Area,Y_Area,Classification

I would like to change them to this order:

 Classification,X_center,Y_center,X_Area,Y_Area

So far I managed to write:

import os
import csv

for file in os.listdir("."):
if file.endswith(".csv"):
with open('*.csv', 'r') as infile, open('reordered.csv', 'a') as outfile:
fieldnames = ['Classification','X_center','Y_center','X_Area','Y_Area']
writer = csv.DictWriter(outfile, fieldnames=fieldnames)
writer.writeheader()
for row in csv.DictReader(infile):
writer.writerow(row)
csv_file.close()

但它会将每一行更改为 Classification,X_center,Y_center,X_Area,Y_Area(替换每一行中的值)。是否可以打开一个文件,重新排序列并以相同的名称保存文件?我检查了其他线程上给出的类似解决方案,但没有成功。感谢您的帮助!

最佳答案

首先,我认为您的问题在于在循环中打开 '*.csv' 而不是打开 file。不过,我建议永远不要覆盖您的原始输入文件。将副本写入新目录要安全得多。这是执行此操作的脚本的修改版本。

import os
import csv
import argparse

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True)
ap.add_argument("-o", "--output", required=True)
args = vars(ap.parse_args())


if os.path.exists(args["output"]) and os.path.isdir(args["output"]):
print("Writing to {}".format(args["output"]))
else:
print("Cannot write to directory {}".format(args["output"]))
exit()

for file in os.listdir(args["input"]):
if file.endswith(".csv"):
print("{} ...".format(file))
with open(os.path.join(args["input"],file), 'r') as infile, open(os.path.join(args["output"], file), 'w') as outfile:
fieldnames = ['Classification','X_center','Y_center','X_Area','Y_Area']
writer = csv.DictWriter(outfile, fieldnames=fieldnames)
writer.writeheader()
for row in csv.DictReader(infile):
writer.writerow(row)
outfile.close()

要使用它,请为您的输出创建一个新目录,然后像这样运行:

python this.py -i input_dir -o output_dir

注意:从你的问题来看,你似乎希望每个文件都被修改到位,所以这基本上是这样做的(输出一个同名的文件,只是在不同的目录中)但让你的输入不受伤害。如果您真的希望将所有文件重新排序到一个文件中,正如您的代码 open('reordered.csv', 'a') 所暗示的那样,您可以通过移动输出初始化代码轻松地做到这一点在进入循环之前执行。

关于python - 在python中修改同一目录中的多个.csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59292999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com