cara membuat nama file dengan tanggal & waktu saat ini di python?

173

Berikut adalah kode fungsional (Buat file dengan sukses)

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

Sekarang saya mencoba untuk menamai file dengan Tanggal Waktu saat ini (saya bukan ahli dalam python)

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

Saya ingin menulis nama file dengan tanggal dan waktu yang pasti, ini adalah file xml, yang telah dibuat oleh program, saya hanya perlu memberi nama file tersebut. Kode di atas tidak berfungsi.

[Diedit] - Kesalahan kembali

  File "./fix.py", line 226, in <module>
    filenames = datetime.now().strftime("%Y%m%d-%H%M%S")
AttributeError: 'module' object has no attribute 'now'
deepcell
sumber
Anda membutuhkan =antara filenamedandatetime
Joel Cornett
Selain itu, bagaimana tepatnya "kode di atas tidak berfungsi"?
Joel Cornett
Saat mengajukan pertanyaan seperti ini, "tidak berfungsi" tidak cukup. Jelaskan persis bagaimana itu gagal.
David Heffernan
1
Apa maksudmu dengan tidak bekerja? Apakah itu menghasilkan kesalahan? Apa yang Anda harapkan hasilnya? Tidak terlalu membantu hanya mengatakan "tidak berhasil".
Joel Cornett
1
Iya! Saya melakukannya dengan benar, kecuali bagian ini -> datetime.now () ini -> datetime.datetime.now () tapi saya menggunakan waktu sekarang .. lihat -> nama file = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = terbuka (nama file + '.xml', 'w')
deepcell

Jawaban:

360

Saat tidak menggunakan datetime, ini memecahkan masalah Anda (menjawab pertanyaan Anda) untuk mendapatkan string dengan format waktu dan tanggal saat ini yang Anda tentukan:

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

hasil:

20120515-155045

jadi nama file Anda bisa menambahkan atau menggunakan string ini.

Levon
sumber
1
Kena kau! waktu tidak ditentukan dalam skrip saya dan saya mencoba menggunakan timedate (tidak berfungsi, saya tidak tahu mengapa), tetapi dengan waktu yang jelas sekarang, nama file dibuat dengan sukses. Terima kasih banyak!
deepcell
2
Saya tidak tahu mengapa Anda menerima jawaban ini ketika ada dua jawaban yang menjelaskan dengan baik apa yang salah dengan kode dalam pertanyaan. Tidak ada yang bertentangan dengan cara Levon melakukan ini, itu berfungsi dengan baik, tetapi ketika Anda mengatakan "tidak bekerja, saya tidak tahu mengapa", sepertinya aneh karena Anda memiliki jawaban yang menjelaskan alasannya.
David Heffernan
Ketika saya mencoba kode di atas, saya menerima, "E AttributeError: objek 'int' tidak memiliki atribut 'strftime'" kesalahan.
rwbyrd
@ rwbyrd Aneh, saya baru saja mencoba 3 baris yang tepat (copy-paste) dengan Python 3.4.1 dan 2.7.6 dan berfungsi - meskipun dengan Python 3 Anda perlu menggunakan print(timestr). Apakah Anda menyalin teks ini dari atas? Mungkin salah ketik?
Levon
3
@ rwbyrd Anda mungkin memiliki variabel int yang disebut "waktu" di suatu tempat dalam lingkup yang membayangi timemodul.
Thomas
38

nowadalah metode kelas datetimedi kelas dalam modul datetime. Jadi kamu butuh

datetime.datetime.now()

Atau Anda dapat menggunakan impor yang berbeda

from datetime import datetime

Selesai dengan cara ini memungkinkan Anda untuk menggunakan datetime.nowsesuai kode dalam pertanyaan.

David Heffernan
sumber
35

Ubah baris ini

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

Untuk

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

Perhatikan ekstra datetime. Atau, ubah import datetimekefrom datetime import datetime

Andy
sumber
1
@ B4NZ41 Itu tidak benar. Pesan kesalahan memperjelas bahwa kode Anda ada di import datetimesuatu tempat.
David Heffernan
;) Maaf! SEKARANG Saya menggunakan waktu impor, sebelum saya menggunakan waktu impor
deepcell
2
@ B4NZ41 Tidak masalah apa yang Anda lakukan sekarang. Itu penting apa yang ada dalam pertanyaan.
David Heffernan
16

Yang ini lebih mudah dibaca manusia.

from datetime import datetime

datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p")
'15-08-2019_11-57-48_PM'
Dev Aggarwal
sumber
Ya tapi menyortir berdasarkan nama tidak akan menyortir secara kronologis
Peter
Saya kira itu hanya membutuhkan YYMMDD bukan DDMMYY?
Dev Aggarwal
5

Saya terkejut tidak ada formatter tunggal yang mengembalikan '(untuk menambahkan nama file)' default - dan format waktu, Kita hanya bisa menulis FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

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

Berikut ini beberapa yang saya perlu sertakan cap tanggal-waktu dalam nama folder untuk membuang file dari scraper 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)
Rich Lysakowski PhD
sumber
Cara yang lebih aman untuk membuat jalur Anda, mungkin: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(juga import shutilpernyataan dapat menggantikan import ospernyataan)
oneindelijk