如何从python中的文件名列表中提取时间戳并转换为时间戳格式?

Man*_*nak 0 python regex timestamp

这是带有时间戳的文件名列表。我需要遍历列表并仅提取列表中的时间戳值并剥离值并转换为时间戳。

s = ['Asbdnfe_20200404_000101.csv',
     'sdndvd_20200404_010202.csv',
     'vdfvdfvdfvd_20190303_030303.csv']

length = len(s)
for i in range(length):
    match = re.search(r"_((\d+)_(\d+))", s[i])
    print(match.group(1))
Run Code Online (Sandbox Code Playgroud)

结果:20200404_000001、20200404_010202、20190303_030303

但我想要的是:

[2020-04-04 00:01:01.000,
2020-04-04 01:02:02.000,
2019-03-03 03:03:03.000]
Run Code Online (Sandbox Code Playgroud)

Nic*_*ick 5

您可以使用datetime.strptime将提取的字符串转换为datetime对象:

from datetime import datetime
import re

s = ['Asbdnfe_20200404_000101.csv','sdndvd_20200404_010202.csv','vdfvdfvdfvd_20190303_030303.csv']

for f in s:
    match = re.search(r"_((\d+)_(\d+))", f)
    d = datetime.strptime(match.group(1), '%Y%m%d_%H%M%S')
    print(d)
Run Code Online (Sandbox Code Playgroud)

输出:

2020-04-04 00:01:01
2020-04-04 01:02:02
2019-03-03 03:03:03
Run Code Online (Sandbox Code Playgroud)

如果要以毫秒为单位打印日期,请使用datetime.strftime

print(d.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
Run Code Online (Sandbox Code Playgroud)

%f说明符打印微秒,所以我们用[:-3]剥回一毫秒值。

要生成结果列表,只需将它们附加到列表中而不是打印它们:

d = []
for f in s:
    match = re.search(r"_((\d+)_(\d+))", f)
    dt = datetime.strptime(match.group(1), '%Y%m%d_%H%M%S')
    d.append(dt.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
    
print(d)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用列表理解:

d = [datetime.strptime(re.search(r"_((\d+)_(\d+))", f).group(1), '%Y%m%d_%H%M%S').strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] for f in s]
Run Code Online (Sandbox Code Playgroud)

输出是一样的:

['2020-04-04 00:01:01.000', '2020-04-04 01:02:02.000', '2019-03-03 03:03:03.000']
Run Code Online (Sandbox Code Playgroud)