我有一个包含 3 列的 csv 文件(订单号、日期、文件名]。
我需要为每一行创建 1 个 csv 文件,文件名基于 [文件名] 字段,仅包含 [订单号] 和 [日期] 字段,没有标题。
在其他一些帖子的帮助下,我已经得到了以下内容。这些文件正在使用正确的名称创建,但我将两个字段作为一个字段一起运行
import csv
with open("//server2/shared/Data/TestExport.csv",'r') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
file_name ='{0}.csv'.format(row['FileName'])
with open(file_name, 'w') as f:
f.write(row['Order Number'])
f.write(row['Date'])
我预计这是一个相当基本的错误 - 这是我第一次尝试 Python!
我无法找到我喜欢的副本,所以如果没有大量潜在的输出文件,我可能会这样做。我将使用
contextlib.ExitStack()
堆栈的字典,其中包含 FileName
的键和打开的文件句柄的值。这样,每个输出文件只能打开一次,而不是每个输入行,并以写入模式打开,而不是写入或追加。
import csv
import contextlib
file_in_path = "in.csv"
writers = {}
with contextlib.ExitStack() as stack:
for row in csv.DictReader(stack.enter_context(open(file_in_path, "r"))):
file_name = row['FileName']
if file_name not in writers:
ctx = stack.enter_context(open(f"{file_name}.csv", "w", newline=""))
writer = csv.DictWriter(ctx, fieldnames=["Order Number", "Date"], extrasaction="ignore")
writer.writeheader()
writers[file_name] = writer
writers[file_name].writerow(row)