【问题标题】:formatting date, time and string for filename格式化文件名的日期、时间和字符串
【发布时间】:2016-08-06 20:10:31
【问题描述】:

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

"日-月-年小时:分钟-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写作本身,其代码被省略。

【问题讨论】:

  • 第一次尝试的结果如何?因为当我尝试它时它的格式很好。 %d-%m-%y %H:%M 应该是一个字符串(带“)顺便说一句。
  • 意味着: 不允许出现在文件名中,至少在 Windows 上是这样
  • 我正在 Windows 上尝试。所以也许我应该避免 : 作为分隔符。
  • 我建议使用下划线 (_) 而不是 : 和任何空格。这样,它可以在大多数操作系统上运行,如果不是全部的话。

标签: python string datetime formatting filenames


【解决方案1】:

: 字符不允许用于 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)

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

【讨论】:

  • 谢谢。只需删除冒号就足以解决问题。我知道有些字符是不允许使用的,但此刻我真的没有考虑过。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多