jak utworzyć nazwę pliku z aktualną datą i godziną w Pythonie?


173

Oto funkcjonalny kod (Utwórz plik z powodzeniem)

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

Teraz próbuję nazwać plik aktualną datą i godziną (nie jestem ekspertem w Pythonie)

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

Chcę wypisać nazwę pliku z dokładną datą i godziną, jest to plik xml, który program już utworzył, muszę tylko nazwać plik. Powyższy kod nie działa.

[EDITED] - Zwrócony błąd

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

potrzebujesz =między filenameadatetime
— Joel Cornett

Poza tym, jak dokładnie „powyższy kod nie działa”?
— Joel Cornett

Przy takim pytaniu „nie działa” nie wystarczy. Opisz dokładnie, jak to się nie udaje.
— David Heffernan

1
Co masz na myśli mówiąc, że nie działa? Czy generuje błąd? Jaki będzie wynik? Powiedzenie „to nie działa” nie jest zbyt pomocne.
— Joel Cornett

1
Tak! Zrobiłem dobrze, poza tą częścią -> datetime.now () to jest -> datetime.datetime.now (), ale teraz używam czasu .. spójrz -> filenames = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = open (nazwy plików + '.xml', 'w')
— deepcell

Odpowiedzi:


360

Gdy nie używasz datetime, rozwiązuje to problem (odpowiada na twoje pytanie) związanym z uzyskaniem ciągu z bieżącym formatem czasu i daty, który określisz:

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

plony:

20120515-155045

więc nazwa pliku może dołączyć lub użyć tego ciągu.


1
Mam cię! czas nie został zdefiniowany w moim skrypcie i próbowałem użyć timedate (nie działa, nie wiem dlaczego), ale z czasem jest już jasne, nazwa pliku jest tworzona z sukcesem. Dziękuję bardzo!
— deepcell

2
Nie wiem, dlaczego zaakceptowałeś tę odpowiedź, skoro są dwie odpowiedzi, które doskonale wyjaśniają, co było nie tak z kodem w pytaniu. Nie ma nic przeciwko temu, w jaki sposób Levon to zrobił, działa dobrze, ale kiedy mówisz „nie działa, nie wiem dlaczego”, wydaje się dziwne, ponieważ masz odpowiedzi, które wyjaśniają dlaczego.
— David Heffernan

Kiedy wypróbowałem powyższy kod, otrzymałem błąd „E AttributeError: 'int' obiekt nie ma atrybutu 'strftime'”.
— rwbyrd

@rwbyrd To dziwne, właśnie wypróbowałem dokładnie te 3 linie (kopiuj-wklej) w Pythonie 3.4.1 i 2.7.6 i to działa - chociaż z Pythonem 3 musisz użyć print(timestr). Czy skopiowałeś ten tekst z góry? Może literówka inaczej?
— Levon

3
@rwbyrd Prawdopodobnie masz gdzieś w zasięgu zmienną typu „time”, która przesłania timemoduł.
— Thomas,

38

nowjest metodą klasową datetimew klasie w module datetime. Więc potrzebujesz

datetime.datetime.now()

Lub możesz użyć innego importu

from datetime import datetime

Wykonane w ten sposób pozwala na użycie datetime.nowzgodnie z kodem w pytaniu.


35

Zmień tę linię

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

Do

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

Zwróć uwagę na dodatkowe datetime. Możesz też zmienić import datetimenafrom datetime import datetime


1
@ B4NZ41 To nieprawda. Komunikat o błędzie wyjaśnia, że ​​kod ma import datetimegdzieś.
— David Heffernan

;) Przepraszamy! TERAZ używam czasu importu, zanim użyłem importu datetime
— deepcell

2
@ B4NZ41 Nie ma znaczenia, co teraz robisz. Ważne, o co chodzi w pytaniu.
— David Heffernan

16

Ten jest znacznie bardziej czytelny dla człowieka.

from datetime import datetime

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

Tak, ale sortowanie według nazwy nie będzie sortowane chronologicznie
— Piotr

Wydaje mi się, że wymaga tylko RRMMDD zamiast DDMMYY?
— Dev Aggarwal

5

Jestem zaskoczony, że nie ma jednego programu formatującego, który zwraca domyślny (i bezpieczny) „do dołączania w nazwie pliku” - format czasu, moglibyśmy po prostu napisać FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

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

2

Oto niektóre, których potrzebowałem, aby w nazwie folderu umieścić znacznik daty i godziny, aby zrzucić pliki ze skrobaka internetowego.

# 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)

Bezpieczniejszym sposobem na stworzenie swojej ścieżki może być: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(również import shutilinstrukcja może zastąpić import osinstrukcję)
— oneindelijk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.