Select 特定子字符串 - 动态索引

Select specific substing - dynamic indexing


我有几个 .csv 文件,格式略有不同。

格式一:X-XXX_2020-11-05_13-54-55-555__XX.csv
格式二:X-XXX_2020-11-05_13-54-55-555__XXX.csv

我需要提取 dametime 字段以将其添加到 pandas 数据帧。 通常我只会使用简单的切片
datetime.datetime.strptime(string1[-31:-8], "%Y-%m-%d_%H-%M-%s-%f")

这会给我想要的结果,但仅限于 Format1。

对于 Format2,由于结尾不同,我需要将索引移动 1 进行切片。
另外由于其他操作,我无法从头开始索引。

目前我通过使用如下所示的 IF 语句绕过了它:

def tdate():
    if string1[-7]=='X':
        return datetime.datetime.strptime(string1[-32:-9], "%Y-%m-%d_%H-%M-%s-%f")
    else:
        return datetime.datetime.strptime(string1[-31:-8], "%Y-%m-%d_%H-%M-%s-%f")

有没有更简单的方法来制作“动态”索引,这样我就可以避免创建额外的 def?

谢谢!

使用 str.split 和列表切片

例如:

import datetime

for i in ("X-XXX_2020-11-05_13-54-55-555__XX.csv", "X-XXX_2020-11-05_13-54-55-555__XXX.csv"):
    print(datetime.datetime.strptime("_".join(i.split("_")[1:3]), "%Y-%m-%d_%H-%M-%S-%f"))

或使用正则表达式。

例如:

import re
import datetime

for i in ("X-XXX_2020-11-05_13-54-55-555__XX.csv", "X-XXX_2020-11-05_13-54-55-555__XXX.csv"):
    d = re.search(r"(?<=_)(.+)(?=__)", i)
    if d:
        print(datetime.datetime.strptime(d.group(1), "%Y-%m-%d_%H-%M-%S-%f"))

输出:

2020-11-05 13:54:55.555000
2020-11-05 13:54:55.555000