como criar um nome de arquivo com a data e hora atuais em python?


173

Aqui está um código funcional (Criar arquivo com sucesso)

sys.stdout = open('filename1.xml', 'w')

Agora estou tentando nomear o arquivo com a Data e hora atual (não sou especialista em python)

filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(filename1 + '.xml', 'w')

Eu quero escrever um nome de arquivo com a data e hora exata, é um arquivo xml, que o programa já criou, só preciso nomear o arquivo. O código acima não está funcionando.

[EDITADO] - O erro retornou

  File "./fix.py", line 226, in <module>
    filenames = datetime.now().strftime("%Y%m%d-%H%M%S")
AttributeError: 'module' object has no attribute 'now'

você precisa de um =entre filenameedatetime
Joel Cornett

Fora isso, como exatamente o "código acima não está funcionando"?
Joel Cornett

Ao apresentar uma pergunta como esta, "não funcionar" não é suficiente. Descreva exatamente como ele falha.
David Heffernan

1
O que você quer dizer com não trabalhar? Isso gera um erro? O que você espera que seja o resultado? Não é muito útil apenas dizer "não está funcionando".
Joel Cornett

1
Sim! Eu fiz certo, exceto esta parte -> datetime.now () é -> datetime.datetime.now (), mas agora estou usando o tempo .. veja -> nomes de arquivos = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = open (nomes de arquivos + '.xml', 'w')
deepcell

Respostas:


360

Enquanto não estiver usando datetime, isso resolve o seu problema (responde sua pergunta) de obter uma sequência com o formato de data e hora atual especificado:

import time
timestr = time.strftime("%Y%m%d-%H%M%S")
print timestr

rendimentos:

20120515-155045

para que seu nome de arquivo possa anexar ou usar essa sequência.


1
Peguei vocês! time não foi definido no meu script e eu estava tentando usar a data e hora (não funciona, não sei por que), mas com o tempo está claro agora, o nome do arquivo é criado com sucesso. Muito obrigado!
deepcell

2
Não sei por que você aceitou esta resposta quando há duas respostas que explicam perfeitamente o que havia de errado com o código da pergunta. Nada contra a maneira como Levon fez isso, funciona bem, mas quando você diz "não funciona, não sei por quê", parece estranho porque você tem respostas que explicam o porquê.
David Heffernan

Quando tentei o código acima, recebi um erro "E AttributeError: 'int' object has no attribute 'strftime'".
Rwbyrd

@rwbyrd Isso é estranho, eu apenas tentei essas 3 linhas exatas (copiar e colar) com o Python 3.4.1 e 2.7.6 e funciona - embora com o Python 3 você precise usar print(timestr). Você copiou este texto de cima? Talvez um erro de digitação caso contrário?
Levon

3
@rwbyrd Você provavelmente tem uma variável int chamada "time" em algum lugar do escopo que está sombreando o timemódulo.
Thomas

38

nowé um método de classe na classe datetimeno módulo datetime. Então você precisa

datetime.datetime.now()

Ou você pode usar uma importação diferente

from datetime import datetime

Feito dessa maneira, você pode usar datetime.nowconforme o código da pergunta.


35

Mude esta linha

filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")

Para

filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")

Observe o extra datetime. Como alternativa, mude import datetimeparafrom datetime import datetime


1
@ B4NZ41 Isso não é verdade. A mensagem de erro deixa claro que seu código tem import datetimealgum lugar.
David Heffernan

;) Desculpe! Agora estou usando o tempo de importação, antes eu estava usando datetime importação
deepcell

2
@ B4NZ41 Não importa o que você está fazendo agora. Importa o que está em questão.
David Heffernan

16

Este é muito mais legível por humanos.

from datetime import datetime

datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p")
'15-08-2019_11-57-48_PM'

Sim, mas a ordenação por nome não irá classificar em ordem cronológica
Peter

Eu acho que isso requer apenas YYMMDD em vez de DDMMYY?
Dev Aggarwal

5

Estou surpreso que não exista um formatador único que retorne um padrão (e seguro) 'para anexar no nome do arquivo' - formato do tempo, poderíamos simplesmente escrever FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

"%x" instead of "%Y%m%d-%H%M%S"

2

Aqui estão algumas que eu precisava incluir o carimbo de data e hora no nome da pasta para descarregar arquivos de um raspador da Web.

# import time and OS modules to use to build file folder name
import time
import os 

# Build string for directory to hold files
# Output Configuration
#   drive_letter = Output device location (hard drive) 
#   folder_name = directory (folder) to receive and store PDF files

drive_letter = r'D:\\' 
folder_name = r'downloaded-files'
folder_time = datetime.now().strftime("%Y-%m-%d_%I-%M-%S_%p")
folder_to_save_files = drive_letter + folder_name + folder_time 

# IF no such folder exists, create one automatically
if not os.path.exists(folder_to_save_files):
    os.mkdir(folder_to_save_files)

Uma maneira mais segura de criar seu caminho, pode ser: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(também uma import shutildeclaração pode substituir a import osdeclaração)
oneindelijk
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.