як створити ім'я файлу з поточною датою та часом у python?


173

Ось функціональний код (Створення файлу з успіхом)

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

Тепер я намагаюся назвати файл поточним датою часу (я не знавець пітона)

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'

вам потрібно =між filenameіdatetime
Джоел Корнетт

Крім того, як саме "вищезгаданий код не працює"?
Джоел Корнетт

Подаючи подібне запитання, "не працює" недостатньо. Опишіть, як саме воно виходить з ладу.
Девід Геффернан

1
Що ви маєте на увазі, не працюючи? Чи створює це помилку? Який ви очікуєте результат? Не дуже корисно просто сказати "це не працює".
Джоел Корнетт

1
Так! Я правильно зробив, за винятком цієї частини -> datetime.now () це -> datetime.datetime.now (), але я зараз використовую час. Погляньте -> filenames = time.strWeather ("% Y% m % d-% H% M% S ") sys.stdout = відкрито (імена файлів + '.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' об'єкт не має атрибута 'strroll'".
rwbyrd

@rwbyrd Це не дивно, я просто спробував ці точні 3 рядки (копіювати-вставити) з Python 3.4.1 та 2.7.6, і це працює, хоча з Python 3 потрібно використовувати print(timestr). Ви скопіювали цей текст зверху? Можливо, помилка друку?
Левон

3
@rwbyrd У вас, ймовірно, є змінна int, яка називається "time" десь в області, що затінює 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 datetimeTofrom datetime import datetime


1
@ B4NZ41 Це неправда. Повідомлення про помилку дає зрозуміти, що ваш код є import 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?
Dev Aggarwal

5

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

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

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)

Більш безпечним способом створення вашого шляху може бути: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(також import shutilзаява може замінити import osвислів)
oneindelijk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.