2017-10-12 7 views
1

Lorsque j'exécute ma requête ci-dessous, il crée un fichier appelé 'mycsvfile'. Toutefois, existe-t-il un moyen d'ajouter la date et l'horodatage en cours lors de la création du fichier CSV? Par exemple, si je lance cette requête maintenant, le fichier doit être nommé mycsvfile20171012 - 10:00:00 (quelque chose comme ça).Comment créer un nom de fichier avec la date et l'heure actuelles en python lorsque la requête est exécutée

Quelqu'un pourrait-il éditer mon code et me montrer comment faire s'il vous plaît?

Mon code:

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) 

Merci à l'avance!

+0

Jetez un oeil à la ([ 'DateTime'] https://docs.python.org/3/library/datetime.html# module-datetime), en particulier les fonctions ['datetime.now()'] (https://docs.python.org/3/library/datetime.html#datetime.datetime.now) et ['datetime.strftime() '] (https://docs.python.org/3/library/datetime.html#datetime.datetime.strftime). – mhawke

Répondre

1

Il est préférable d'utiliser soulignement dans le nom de fichier que tout autre caractère spécial puisqu'elle largement accepté le nom de fichier construction Par conséquent comme ci-dessous:

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

Utilisez datetime comme ci-dessous:

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 = <PASS YOUR FILE HERE> 

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) 
+0

Salut Dinesh, je reçois l'erreur ci-dessous lorsque j'utilise votre méthode - Traceback (dernier appel dernier): Fichier "C: /Users/.PyCharmCE2017.2/config/scratches/test1.py", ligne 28, dans avec open (csv_file, 'w') comme f: # Utilisez simplement le mode 'w' dans 3.x OSError: [Errno 22] Argument invalide: 'myfile_2017-10-12_10: 31: 12.csv' – Rich

+0

i ne l'a pas downvote, – Rich

+0

merci dinesh! cela a fonctionné mais je me demandais juste s'il y a une autre manière de formater le nom du fichier. par exemple maintenant le format est - mycsvfile2017-10-12_10_35_13. Y at-il un moyen d'avoir mycsvfile2017-10-12_10: 35: 13 – Rich

2

Oui, vous pouvez le faire comme ceci: Cependant « : » est pas pris en charge dans les noms de fichiers si 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  
+0

où pourrais-je mettre ceci dans mon code? code vous me montrez s'il vous plaît – Rich

+0

vous le mettez où vous ouvrez le fichier –

+0

@Silencer vous devez ajouter .csv au format et lui montrer un exemple. –

0

Avoir une variable pour le nom de fichier en tant que file_name et utiliser datetime.now()

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