从文件名中提取“ WeekDay Month Date HH:MM:SS”?

时间:2019-06-27 00:53:52

标签: python regex python-3.x

我有一些文件,其中包含完整的日期和时间。我想提取特定格式并将其打印为我正在编写的CSV的第一行。

我的文件名如下:

VIN5_2019-04-03_10-21-26_38

我希望CSV的第一行打印如下:

date Wed Apr 3 10:21:26.000 am 2019

我的代码如下:

import can
import csv
import datetime
import re

filename = open('C:\\Users\\xyz\\files\\time_linear_Hexa.csv', "w")
log1 = can.BLFReader('C:\\Users\\xyz\\blf files\\VIN5_2019-04-03_10-33-59_39.blf')
filename.write(re.search("([0-9]{4}\-[0-9]{2}\-[0-9]{2})", filename))
filename.write('base hex  timestamps absolute\ninternal events logged \n// version 11.0.0 \n')

如何以与下面的屏幕快照所示的文件图像相同的格式获取日期和时间?

screenshot of desired file contents

2 个答案:

答案 0 :(得分:2)

使用正则表达式和datetime模块。

例如:

import re
import datetime
s = "VIN5_2019-04-03_10-21-26_38"
m = re.search(r"[A-Z]+\d_(?P<date>\d{4}\-\d{2}\-\d{2})_(?P<time>\d{2}\-\d{2}\-\d{2})", s)
if m:
    print(datetime.datetime.strptime("{} {}".format(m.group('date'), m.group('time')), "%Y-%m-%d %H-%M-%S").strftime("%a %b %d %H:%M:%S.%f %p %Y"))

输出:

Wed Apr 03 10:21:26.000000 AM 2019

答案 1 :(得分:1)

您可以使用先行搜索和后退来提取日期时间字符串,使用strptime将其转换为日期时间对象,然后使用strftime将其格式化为所需的形式。

import re
import datetime from datetime
s = "VIN5_2019-04-03_10-21-26_38"

res = re.search('(?<=\w{5})[\w-]*(?=_\d{2})', s)
dt_string = res[0]

dt = datetime.strptime(dt_string, '%Y-%m-%d_%H-%M-%S')

'{} {} {}'.format(dt.strftime('%a %b %d %H:%M:%S.%f')[:-3], dt.strftime('%p').lower(), dt.strftime('%Y'))