如何在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文件,我只需要命名该文件即可。上面的代码不起作用。

[编辑] -返回错误

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

您需要=介于filenamedatetime
Joel Cornett

除此之外,“以上代码不起作用”到底如何?
乔尔·科内特

提出这样的问题时,“不起作用”是不够的。准确描述它是如何失败的。
大卫·赫弗南

1
不工作是什么意思?它会产生错误吗?您期望结果如何?仅仅说“它不起作用”不是很有帮助。
乔尔·科内特

1
是! 我做对了,除了这部分-> datetime.now()它是-> datetime.datetime.now(),但是我现在正在使用时间..看看-> filenames = time.strftime(“%Y%m %d-%H%M%S“)sys.stdout = open(文件名+'.xml','w')
Deepcell 2012年

Answers:


357

不使用时datetime,这可以解决您的问题(回答您的问题),该问题是使用您指定的当前时间和日期格式获取字符串:

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

产量:

20120515-155045

因此您的文件名可以追加或使用此字符串。


1
知道了!我的脚本中未定义时间,并且我试图使用timedate(不起作用,我不为什么),但是随着时间的推移,现在很清楚,成功创建了文件名。非常感谢!
deepcell

2
我不知道为什么当有两个答案可以很好地说明问题中的代码出了什么问题时,您为什么接受这个答案。没什么比Levon做到这一点的方法更好的了,但是当您说“不起作用,我不知道为什么”时,这似乎很奇怪,因为您有解释原因的答案。
大卫·赫弗南

当我尝试上面的代码时,我收到一个“ E AttributeError:'int'对象没有属性'strftime'”错误。
rwbyrd

@rwbyrd奇怪的是,我只是使用Python 3.4.1和2.7.6尝试了这3行(复制粘贴),并且可以正常工作-尽管需要使用Python 3 print(timestr)。您是否从上方复制了此文本?也许错别字?
莱文,2015年

3
@rwbyrd您可能在作用于time模块的范围内某处有一个名为“ time”的int变量。
托马斯

37

nowdatetime模块中类中的类方法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 datetimefrom datetime import datetime


1
@ B4NZ41不是。该错误消息使您的代码清晰可见import datetime
David Heffernan

;)对不起!现在,我正在使用导入时间,然后再使用导入日期时间
deepcell 2012年

2
@ B4NZ41您现在在做什么都没关系。问题很重要。
David Heffernan'5

16

这个更容易被人类理解。

from datetime import datetime

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

是的,但是按名称排序不会按时间顺序排序
Peter

我猜这只需要YYMMDD而不是DDMMYY吗?
Dev Aggarwal

5

我很惊讶没有单个格式化程序返回默认的(并且安全的)“用于追加文件名”-时间的格式,我们可以简单地编写 FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

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

2

我需要在文件夹名称中包括日期时间戳,以便从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)

创建路径的一种更安全的方法可能是: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)import shutil可以使用一条语句代替import os语句)
一个
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.