使用glob通配符模式和日期/时间格式从路径中解析日期/时间
项目描述
datetime-glob
类似于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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9d11a7240de9c739a21a5e730f244b488b6835880c03a6c00e98c4f3792dcce0 |
|
MD5 | 53a63ca7762f4e82280bb9c7ebe5aacb |
|
BLAKE2b-256 | e189aa19dadd7633dbe09685425b4a87c2e514e8bf03eef43d19cfb25a922d6a |