我有数千个文件名带有日期时间的文件。
可悲的是,日期时间块之间的分隔符并不总是相同。
示例:
我设法用正则表达式在字符串中找到日期时间部分
import re
strings = ['Data_trul-100A1-Berlin_2019-01-31_150430.dat',
'Data_tral-2000B2-Frankf-2018_02_27-190200.dat',
'Data_bash-300003_Hambrg_2017-04-12_210500.dat']
for part_string in strings:
match = re.search('\d{4}[-_]\d{2}[-_]\d{2}[-_]\d{6}', part_string)
print(match.group())
但是,现在我不得不将组转换为日期时间
from datetime import datetime
date = datetime.strptime(match.group(), "%Y-%m-%d_%H%M%S")
因为我需要指定破折号或下划线。
我想出了以下解决方案来替换它,但这感觉就像是作弊。
for part_string in strings:
part_string = part_string.replace('-',"_")
match = re.search('\d{4}_\d{2}_\d{2}_\d{6}', part_string)
date = datetime.strptime(match.group(), "%Y_%m_%d_%H%M%S")
print(date)
有没有更优雅的方式?使用正则表达式查找分隔符并将其传递给strptime?
答案 0 :(得分:1)
您可以更改正则表达式以查找4个单独的元素
match = re.search('(\d{4})[-_](\d{2})[-_](\d{2})[-_](\d{6})', part_string)
然后将它们组合成一种标准的字符串格式
fixedstring = "{}_{}_{}_{}".format(match.groups())
date = datetime.strptime(match.group(), "%Y_%m_%d_%H%M%S")
当然,在这一点上,您可以将部分时间的HHMMSS分成自己的元素,然后直接构建datetime对象,
m = re.search('(\d{4})[-_](\d{2})[-_](\d{2})[-_](\d{2})(\d{2})(\d{2})', part_string)
date = datetime.datetime(year=m.group(0),
month=m.group(1),
day=m.group(2),
hour=m.group(3),
minute=m.group(4),
second=m.group(5))