Search Files
If you have multi-format filenames on the data source directory, and you want to dynamic getting max datetime on these filenames to your function, you can use a formatter group.
Scenario 01: search with naming and datetime
On the source directory that you want to get the latest file from a business date in the filename (It so easy if you want to get the latest modified date) include other files that not has format name relate with your requirement.
|
|--- googleMap_20230101.json
|--- googleMap_20230103.json
|--- googleMap_20230103_bk.json
|--- googleMap_with_usage_20230105.json
|--- googleDrive_with_usage_20230105.json
Code
from fmtutil import (
make_group, Naming, Datetime, FormatterGroup, FormatterGroupType, FormatterArgumentError
)
name: Naming = Naming.parse('Google Map', fmt='%t')
fmt_group: FormatterGroupType = make_group({
"naming": name.to_const(),
"timestamp": Datetime,
})
rs: list[FormatterGroup] = []
for file in (
'googleMap_20230101.json',
'googleMap_20230103.json',
'googleMap_20230103_bk.json',
'googleMap_with_usage_20230105.json',
'googleDrive_with_usage_20230105.json',
):
try:
rs.append(
fmt_group.parse(file, fmt=r'{naming:c}_{timestamp:%Y%m%d}\.json')
)
except FormatterArgumentError:
continue
repr(max(rs).groups['timestamp'])
Note
The above Example will convert the name, Naming instance, to Constant
instance before passing to the Formatter Group because it does not want
to dynamic parsing this format when find any matching filenames at destination
path.