У меня есть подпрограмма 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))