簡體   English   中英

如何從 python 的文件名列表中提取時間戳並轉換為時間戳格式?

[英]How to extract timestamp from filename list in python and convert to Timestamp format?

這是其中帶有時間戳的文件名列表。 我需要遍歷列表並僅提取列表中的時間戳值並剝離值並轉換為時間戳。

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

結果: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]

您可以使用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)

Output:

2020-04-04 00:01:01
2020-04-04 01:02:02
2019-03-03 03:03:03

如果要以毫秒為單位打印日期,請使用datetime.strftime

print(d.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])

%f說明符打印微秒,因此我們使用[:-3]將其剝離回毫秒值。

要生成結果列表,只需 append 將它們添加到列表中,而不是打印它們:

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)

或者您可以使用列表推導:

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]

output 是一樣的:

['2020-04-04 00:01:01.000', '2020-04-04 01:02:02.000', '2019-03-03 03:03:03.000']

您可以使用datetime

import datetime import datetime

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])
    time_str = match.group(1)
    print(datetime.strptime(time_str, "%Y%m%d_%H%M%S").strftime("%Y-%m-%d %H:%M:%S"))

您可以使用 DateTime 解析和格式化如下

from datetime import datetime 
import re

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))
    print(datetime.strptime(match.group(1), '%Y%m%d_%H%M%S').strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])

您將獲得 output 為

2020-04-04 00:01:01.000
2020-04-04 01:02:02.000
2019-03-03 03:03:03.000

謝謝,

每當你需要對一堆相似的輸入做同樣的事情時,尋找一個共同的模式並從那里開始。 在這種情況下,模式非常簡單,所以正則表達式實際上是多余的。

import datetime as dt
from pathlib import Path

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

datetimes = []
for filename in s:
    name = Path(filename).stem    # or os.path.splitext(filename)[0]
    timestamp_str = name[-15:]
    file_dt = dt.strptime(timestamp_str, '%Ym%d_%H%M%S')
    datetimes.append(file_dt)

您所有的文件名都采用<some_prefix>_<YYYYMMDD>_<HHMMSS>.csv的形式。 所以不管<some_prefix>是什么,都可以從右邊開始索引字符串,每次都以同樣的方式拉出日期時間信息。 正如其他人所指出的,一旦你這樣做了, datetime模塊的strptime function 正是為此用途而存在的。

即使您遇到輸入不像您發布的幾個文件名那樣干凈和規則的情況,也只需尋找一個稍微抽象一點的模式並圍繞它編寫代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM