Cómo crear un nombre de archivo con la fecha y hora actual en python cuando se ejecuta la consulta

Cuando ejecuto mi consulta a continuación, crea un archivo llamado ‘mycsvfile’. Sin embargo, ¿hay una manera de agregar la fecha actual y la marca de tiempo cuando se crea el archivo CSV? Por ejemplo, si ejecuto esta consulta ahora, el archivo debería llamarse mycsvfile20171012 – 10:00:00 (algo así).

¿Podría alguien editar mi código y mostrarme cómo hacer esto por favor?

Mi código:

from elasticsearch import Elasticsearch import csv es = Elasticsearch(["9200"]) # Replace the following Query with your own Elastic Search Query res = es.search(index="search", body= { "_source": ["DTDT", "TRDT", "SPLE", "RPLE"], "query": { "bool": { "should": [ {"wildcard": {"CN": "TEST1"}} ] } } }, size=10) header_names = { 'DTDT': 'DATE', 'TRDT': 'TIME', ...} with open('mycsvfile.csv', 'w') as f: # Just use 'w' mode in 3.x header_present = False for doc in res['hits']['hits']: my_dict = doc['_source'] if not header_present: w = csv.DictWriter(f, my_dict.keys()) w.writerow(header_names) # will write DATE, TIME, ... in correct place header_present = True w.writerow(my_dict) 

¡Gracias de antemano!

Es mejor usar el guión bajo en el nombre del archivo que cualquier otro carácter especial, ya que se acepta ampliamente. Por lo tanto, construya el nombre del archivo como se indica a continuación:

 csv_file = 'myfile_' + str(datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) + '.csv' 

Utilice datetime como abajo:

 from elasticsearch import Elasticsearch import csv es = Elasticsearch(["9200"]) # Replace the following Query with your own Elastic Search Query res = es.search(index="search", body= { "_source": ["DTDT", "TRDT", "SPLE", "RPLE"], "query": { "bool": { "should": [ {"wildcard": {"CN": "TEST1"}} ] } } }, size=10) from datetime import datetime import os file_path =  csv_file = 'myfile_' + str(datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) + '.csv' csv_file_full = os.path.join(file_path, os.sep, csv_file) header_names = { 'DTDT': 'DATE', 'TRDT': 'TIME', ...} with open(csv_file_full, 'w') as f: # Just use 'w' mode in 3.x header_present = False for doc in res['hits']['hits']: my_dict = doc['_source'] if not header_present: w = csv.DictWriter(f, my_dict.keys()) w.writerow(header_names) # will write DATE, TIME, ... in correct place header_present = True w.writerow(my_dict) 

Sí, puede hacer esto: Sin embargo, “:” no es compatible con los nombres de archivo, por lo que 20171010–10.00.00

 >>> import time >>> fname = lambda : "mycsvfile{}.csv".format(time.strftime("%Y%m%d-%H.%M.%S")) >>> >>> fname() 'mycsvfile20171012-17.24.59.csv' >>> with open(fname()) as f: >>> pass 

Tenga una variable para el nombre de archivo como file_name y use datetime.now()

 from datetime import datetime file_name = 'mycsvfile' + str(datetime.now()) + '.csv'