Как создать имя файла с текущей датой и временем в Python?

173

Вот функциональный код (Создать файл с успехом)

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

Сейчас я пытаюсь назвать файл с текущей датой времени (я не эксперт в Python)

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

Я хочу записать имя файла с точной датой и временем, это файл xml, который программа уже создала, мне просто нужно назвать файл. Приведенный выше код не работает.

[EDITED] - ошибка возвращена

  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
источник
вам нужно =между filenameиdatetime
Джоэл Корнетт
Кроме этого, как именно «вышеуказанный код не работает»?
Джоэл Корнетт
Когда задаешь такой вопрос, «не работает» недостаточно. Опишите точно, как это не удается.
Дэвид Хеффернан
1
Что вы имеете в виду, не работая? Это генерирует ошибку? Что вы ожидаете от результата? Не очень полезно просто сказать «это не работает».
Джоэл Корнетт
1
Да! Я сделал правильно, за исключением этой части -> datetime.now () это -> datetime.datetime.now (), но я использую время сейчас .. посмотрите -> filenames = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = open (имена файлов + '.xml', 'w')
Deepcell

Ответы:

360

Хотя это и не используется datetime, это решает вашу проблему (отвечает на ваш вопрос) получения строки с указанным вами текущим форматом времени и даты:

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

выходы:

20120515-155045

так что ваше имя файла может добавить или использовать эту строку.

Левон
источник
1
Попался! время не было определено в моем сценарии, и я пытался использовать timedate (не работает, я не знаю почему), но со временем стало ясно, что имя файла создано с успехом. Спасибо большое!
Deepcell
2
Я не знаю, почему вы приняли этот ответ, когда есть два ответа, которые прекрасно объясняют, что не так с кодом в вопросе. Ничто не противоречит тому, как Левон сделал это, все работает нормально, но когда вы говорите «не работает, я не знаю почему», это кажется странным, потому что у вас есть ответы, объясняющие почему.
Дэвид Хеффернан
Когда я попробовал приведенный выше код, я получил сообщение об ошибке «E AttributeError:« int »не имеет атрибута« strftime »».
rwbyrd
@ rwbyrd Это странно, я только что попробовал эти три строки (копировать-вставить) с Python 3.4.1 и 2.7.6, и это работает - хотя с Python 3 вам нужно использовать print(timestr). Вы скопировали этот текст сверху? Возможно, опечатка в противном случае?
Левон
3
@rwbyrd Возможно, у вас где-то в области видимости переменная int, называемая «время», которая скрывает timeмодуль.
Томас
38

nowэто метод класса datetimeв классе в модуле datetime. Так вам нужно

datetime.datetime.now()

Или вы можете использовать другой импорт

from datetime import datetime

Выполнено таким образом, позволяет использовать datetime.nowв соответствии с кодом в вопросе.

Дэвид Хеффернан
источник
35

Изменить эту строку

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

к

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

Обратите внимание на доп datetime. В качестве альтернативы, измените import datetimeнаfrom datetime import datetime

Энди
источник
1
@ B4NZ41 Это не правда. Сообщение об ошибке дает понять, что ваш код import datetimeгде-то есть .
Дэвид Хеффернан
;) Сожалею! СЕЙЧАС я использую время импорта, прежде чем я использовал импорт datetime
deepcell
2
@ B4NZ41 Неважно, что ты сейчас делаешь. Имеет значение то, что находится в вопросе.
Дэвид Хеффернан
16

Этот намного более читабелен.

from datetime import datetime

datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p")
'15-08-2019_11-57-48_PM'
Дев Аггарвал
источник
Да, но сортировка по имени не будет сортироваться в хронологическом порядке
Питер
Я думаю, что просто требуется YYMMDD вместо DDMMYY?
Дев Аггарвал
5

Я удивлен, что нет какого-то единого форматера, который возвращает значение по умолчанию (и безопасное) «для добавления в имя файла» - формат времени, мы могли бы просто написать FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

"%x" instead of "%Y%m%d-%H%M%S"
oneindelijk
источник
2

Вот некоторые из них, которые мне нужно было включить в название папки с указанием даты и времени для выгрузки файлов из веб-скребка.

# 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)
Рич Лысаковский PhD
источник
Более безопасный способ создать свой путь может быть следующим: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(также import shutilоператор может заменить import osоператор)
oneindelijk