格式化文件名的日期,时间和字符串

时间:2016-08-06 20:10:32

标签: python string datetime formatting filenames

我想创建一个csv文件,其文件名格式如下:

“day-month-year hour:minute-malware_scan.csv”

示例:“6-8-2016 21:45-malware_scan.csv”

文件名的第一部分由文件创建时的实际日期和时间组成,而“-malware_scan.csv”是固定字符串。

我知道为了获得日期和时间,我应该使用time或datetime模块和strftime()函数进行格式化。

起初我尝试过:

t = datetime.datetime.now()
formatted_time = t.strftime(%d-%m-%y %H:%M)
filename = formatted_time + "-malware_scan.csv"
with open(filename, "a") as f:
    ...............

我没有得到预期的结果,所以我尝试了另一种方式:

i = datetime.datetime.now()
file_to_open = "{day}-{month}-{year} {hour}:{minute}-malware_scan.csv".format(day = i.day, month = i.month, year = i.year, hour = i.hour, minute = i.minute)
with open(file_to_open, "a") as f:
    .......................

同样使用上面的代码我没有得到预期的结果。 我得到了这种文件名:“6-8-2016 21”。显示日,月,年和小时,但不显示分钟和字符串的其余部分(-malware_scan.csv)。

我只关注这个问题的文件名,而不是csv写的本身,其代码被省略。

2 个答案:

答案 0 :(得分:2)

PC上的文件名不允许使用:字符。您可以完全丢弃:分隔符:

>>> from datetime import datetime
>>> t = datetime.now()
>>> formatted_time = t.strftime('%d-%m-%y %H%M')
>>> formatted_time
'06-08-16 2226'
>>> datetime.strptime(formatted_time, '%d-%m-%y %H%M')
datetime.datetime(2016, 8, 6, 22, 26)

或者用下划线或连字符替换该字符。

答案 1 :(得分:0)

感谢Moses Koledoye发现问题。我以为我在Python代码中犯了一个错误,但实际上问题是文件名的字符。

根据MSDN,以下是Windows上不能在文件名中使用的保留字符:

< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)