【发布时间】:2017-10-06 12:55:12
【问题描述】:
我有一个 Python (3.4) 例程,它使用生成器编写 csv 文件。但是,根据参数集,可能没有任何数据,在这种情况下,我不希望写入csv 文件。 (它只会写入带有标题的文件)。
目前,创可贴是在生成后计算行数,然后删除文件,但肯定有更好的方法,同时保留生成器是唯一知道是否有数据的代码的模式给定的参数,(也不必调用生成器两次):
def write_csv(csv_filename, fieldnames, generator, from_date, to_date, client=None):
with open(csv_filename, 'w', newline='') as csv_file:
csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter='\t')
csv_writer.writeheader()
csv_writer.writerows(generator(from_date, to_date, client))
# If no rows were written delete the file, we don't want it
with open(csv_filename) as f:
lines = sum(1 for _ in f)
if lines == 1:
f.close()
os.remove(f.name)
def per_client_items_generator(from_date, to_date, client):
return (per_client_detail(client, sales_item) for sales_item in
sales_by_client.get(client))
【问题讨论】:
标签: python csv generator writer