我有一個使用生成器編寫csv
文件的Python(3.4)例程。但是,根據參數集,可能沒有任何數據,在這種情況下,我不希望寫入csv
文件。 (它只會用一個頭文件寫入文件)。如果沒有數據,請勿使用csv DictWriter編寫文件
現在,bandaid是計算生成後的行數,然後刪除文件,但肯定必須有更好的方法,同時保留生成器是唯一的代碼,它知道是否有數據給定參數,(也有兩次在發電機調用):
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))
您還可以看看http://stackoverflow.com/questions/661603/how-do-i-know-如果生成器是空的從一開始或http://stackoverflow.com/questions/3114252/one-liner-to-check-whether-an-iterator-yields-at-least-one-元件。 –