How to create a file name with the current date & time in Python?
Question:
Here is a functional code (create file with success)
sys.stdout = open('filename1.xml', 'w')
Now I’m trying to name the file with the current date/time (I’m not an expert in Python)
filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(filename1 + '.xml', 'w')
I want to write out a file name with the exact date and time, it is a xml file, that the program has already create, I just need to name the file. The above code is not working.
The error returned:
File "./fix.py", line 226, in <module>
filenames = datetime.now().strftime("%Y%m%d-%H%M%S")
AttributeError: 'module' object has no attribute 'now'
Answers:
While not using datetime
, this solves your problem (answers your question) of getting a string with the current time and date format you specify:
import time
timestr = time.strftime("%Y%m%d-%H%M%S")
print timestr
yields:
20120515-155045
so your filename could append or use this string.
now
is a class method in the class datetime
in the module datetime
. So you need
datetime.datetime.now()
Or you can use a different import
from datetime import datetime
Done this way allows you to use datetime.now
as per the code in the question.
Change this line
filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")
To
filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
Note the extra datetime
. Alternatively, change your
import datetime
to from datetime import datetime
I’m surprised there is not some single formatter that returns a default (and safe) ‘for appending in filename’ – format of the time,
We could simply write FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'
"%x" instead of "%Y%m%d-%H%M%S"
This one is much more human readable.
from datetime import datetime
datetime.now().strftime("%Y_%m_%d-%I_%M_%S_%p")
'2020_08_12-03_29_22_AM'
Here’s some that I needed to include the date-time stamp in the folder name for dumping files from a web scraper.
# import time and OS modules to use to build file folder name
import datetime
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)
import datetime
def print_time():
parser = datetime.datetime.now()
return parser.strftime("%d-%m-%Y %H:%M:%S")
print(print_time())
# Output>
# 03-02-2021 22:39:28
This prints in an easy to read format –
import datetime
time_now = datetime.datetime.now().strftime('%m_%d_%Y_%H_%M_%S')
print(time_now)
Output: 02_03_2021_22_44_50
Here is a functional code (create file with success)
sys.stdout = open('filename1.xml', 'w')
Now I’m trying to name the file with the current date/time (I’m not an expert in Python)
filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(filename1 + '.xml', 'w')
I want to write out a file name with the exact date and time, it is a xml file, that the program has already create, I just need to name the file. The above code is not working.
The error returned:
File "./fix.py", line 226, in <module>
filenames = datetime.now().strftime("%Y%m%d-%H%M%S")
AttributeError: 'module' object has no attribute 'now'
While not using datetime
, this solves your problem (answers your question) of getting a string with the current time and date format you specify:
import time
timestr = time.strftime("%Y%m%d-%H%M%S")
print timestr
yields:
20120515-155045
so your filename could append or use this string.
now
is a class method in the class datetime
in the module datetime
. So you need
datetime.datetime.now()
Or you can use a different import
from datetime import datetime
Done this way allows you to use datetime.now
as per the code in the question.
Change this line
filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")
To
filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
Note the extra datetime
. Alternatively, change your
import datetime
to from datetime import datetime
I’m surprised there is not some single formatter that returns a default (and safe) ‘for appending in filename’ – format of the time,
We could simply write FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'
"%x" instead of "%Y%m%d-%H%M%S"
This one is much more human readable.
from datetime import datetime
datetime.now().strftime("%Y_%m_%d-%I_%M_%S_%p")
'2020_08_12-03_29_22_AM'
Here’s some that I needed to include the date-time stamp in the folder name for dumping files from a web scraper.
# import time and OS modules to use to build file folder name
import datetime
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)
import datetime
def print_time():
parser = datetime.datetime.now()
return parser.strftime("%d-%m-%Y %H:%M:%S")
print(print_time())
# Output>
# 03-02-2021 22:39:28
This prints in an easy to read format –
import datetime
time_now = datetime.datetime.now().strftime('%m_%d_%Y_%H_%M_%S')
print(time_now)
Output: 02_03_2021_22_44_50