跳转到主要内容

使用glob通配符模式和日期/时间格式从路径中解析日期/时间

项目描述

datetime-glob

Check status Test coverage PyPI - version PyPI - Python Version

类似于strptime/strftime格式的日期/时间格式,从路径中解析日期/时间。

datetime.datetime.strptime足以进行简单的日期/时间解析。然而,一旦需要处理通配符,就会变得复杂,您需要求助于正则表达式。

我们发现glob模式和strptime格式比正则表达式更容易阅读和编写,并将涉及正则表达式的逻辑封装在这个模块中。

安装

  • 创建虚拟环境

python3 -m venv venv3
  • 激活它

source venv3/bin/activate
  • 使用pip安装datetime-glob

pip3 install datetime-glob

使用方法

匹配路径

>>> import datetime_glob
>>> matcher = datetime_glob.Matcher(pattern='/some/path/*%Y-%m-%dT%H-%M-%SZ.jpg')
>>> match = matcher.match(path='/some/path/some-text2016-07-03T21-22-23Z.jpg')
>>> match
datetime_glob.Match(year = 2016, month = 7, day = 3, hour = 21, minute = 22, second = 23)

>>> match.as_datetime()
datetime.datetime(2016, 7, 3, 21, 22, 23)
>>> match.as_date()
datetime.date(2016, 7, 3)
>>> match.as_time()
datetime.time(21, 22, 23)

如果您为同一字段指定两次指令,匹配器将确保该字段在语义上具有相同的值以便匹配

>>> import datetime_glob
>>> matcher = datetime_glob.Matcher(pattern='/some/path/%y/%Y-%m-%d.txt')

>>> match = matcher.match(path='/some/path/16/2016-07-03.txt')
>>> match
datetime_glob.Match(year = 2016, month = 7, day = 3)

>>> match = matcher.match(path='/some/path/19/2016-07-03.txt')
>>> type(match)
<class 'NoneType'>

您可以在文件系统中遍历模式

import datetime_glob
for match, path in datetime_glob.walk(pattern='/some/path/*%Y/%m/%d/%H-%M-%SZ.jpg'):
    dtime = match.as_datetime()
    print(dtime, path)
2016-03-04 12:13:14 /some/path/saved-2016/03/04/12-13-14Z.jpg
2017-11-23 22:23:24 /some/path/restored-2017/11/23/22-23-24Z.jpg

手动遍历树,并逐个匹配路径段

>>> import datetime_glob
>>> pattern_segments = datetime_glob.parse_pattern(pattern='/some/path/*%Y/%m/%d/%H-%M-%SZ.jpg')
>>> match = datetime_glob.Match()

>>> match=datetime_glob.match_segment(segment='some', pattern_segment=pattern_segments[0], match=match)
>>> match
datetime_glob.Match()

>>> match=datetime_glob.match_segment(segment='path', pattern_segment=pattern_segments[1], match=match)
>>> match
datetime_glob.Match()

>>> match=datetime_glob.match_segment(segment='some-text2016', pattern_segment=pattern_segments[2], match=match)
>>> match
datetime_glob.Match(year = 2016)

>>> match=datetime_glob.match_segment(segment='07', pattern_segment=pattern_segments[3], match=match)
>>> match
datetime_glob.Match(year = 2016, month = 7)

>>> match=datetime_glob.match_segment(segment='03', pattern_segment=pattern_segments[4], match=match)
>>> match
datetime_glob.Match(year = 2016, month = 7, day = 3)

>>> match=datetime_glob.match_segment(segment='21-22-23Z.jpg', pattern_segment=pattern_segments[5], match=match)
>>> match
datetime_glob.Match(year = 2016, month = 7, day = 3, hour = 21, minute = 22, second = 23)

支持的strftime指令

(来自 https://docs.pythonlang.cn/3/library/datetime.html#strftime-and-strptime-behavior 的子集)

指令

含义

示例

%d

月份的天数,以零填充的十进制数字。

01, 02, …, 31

%-d

月份的天数,十进制数字。

1, 2, …, 31

%m

月份,以零填充的十进制数字。

01, 02, …, 12

%-m

月份,十进制数字。

1, 2, …, 12

%y

不带世纪的年份,以零填充的十进制数字。

00, 01, …, 99

%Y

带世纪的年份,十进制数字。

1970, 1988, 2001, 2013

%H

小时(24小时制)以零填充的十进制数字。

00, 01, …, 23

%-H

小时(24小时制)的十进制数字。

0, 1, …, 23

%M

分钟,以零填充的十进制数字。

00, 01, …, 59

%-M

分钟,十进制数字。

0, 1, …, 59

%S

秒,以零填充的十进制数字。

00, 01, …, 59

%-S

秒,十进制数字。

0, 1, …, 59

%f

微秒,左边的零填充的十进制数字。

000000, 000001, …, 999999

%%

文字符号‘%’字符。

%

开发

  • 查看仓库。

  • 在仓库根目录下创建虚拟环境

python3 -m venv venv3
  • 激活虚拟环境

source venv3/bin/activate
  • 安装开发依赖项

pip3 install -e .[dev]
  • 运行 precommit.py 在本地执行预提交检查。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

datetime-glob-1.0.8.tar.gz (10.3 kB 查看哈希值)

上传时间

支持者:

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF 赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面