如何在strtime中使用的datetime字符串中检测破折号或下划线?

2024-10-02 10:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几千个文件,文件名中有datetime。
遗憾的是,日期时间块之间的偏差并不总是相同的。
示例:

  • 数据\u trul-100A1-Berlin \u 2019-01-31 \u 150480.dat
  • 数据\u tral-2000B2-Frankf-2018 \u 02 \u 27-190200.dat
  • 数据\u bash-300003 \u Hambrg \u 2017-04-12 \u 210500.dat

我用正则表达式在字符串中找到了datetime部分

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())

但是,现在我不得不将组转换为datetime

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)

有没有更优雅的方式?使用regex找到除法器并将其传递给strtime?你知道吗


Tags: 数据redatadatetimedatestringmatchgroup
1条回答
网友
1楼 · 发布于 2024-10-02 10:21:22

您可以更改正则表达式以找到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")

当然,此时您可以将hhmms部分时间拆分为它们自己的元素,并直接构建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))

相关问题 更多 >

    热门问题