Skip to content

get_file_datetime

Functions:

Name Description
get_file_datetime

Classes#

Functions#

get_file_datetime #

get_file_datetime(
    file: Union[Path, str], filename_template: str
) -> datetime
Source code in tsdat/utils/get_file_datetime.py
def get_file_datetime(file: Union[Path, str], filename_template: str) -> datetime:
    template = Template(filename_template)
    properties: dict[str, str] = template.extract_substitutions(str(file)) or {}

    year_fields = dict(
        year=lambda prop: prop,
        yyyy=lambda prop: prop,
        date_time=lambda prop: prop[:4],
        start_date=lambda prop: prop[:4],
        date=lambda prop: prop[:4],
    )
    month_fields = dict(
        month=lambda prop: prop,
        mm=lambda prop: prop,
        date_time=lambda prop: prop[4:6],
        start_date=lambda prop: prop[4:6],
        date=lambda prop: prop[4:6],
    )
    day_fields = dict(
        day=lambda prop: prop,
        dd=lambda prop: prop,
        date_time=lambda prop: prop[6:8],
        start_date=lambda prop: prop[6:8],
        date=lambda prop: prop[6:8],
    )
    hour_fields = dict(
        hour=lambda prop: prop,
        HH=lambda prop: prop,
        date_time=lambda prop: prop.split(".")[1][:2],
        start_time=lambda prop: prop[:2],
        time=lambda prop: prop[:2],
    )
    minute_fields = dict(
        minute=lambda prop: prop,
        MM=lambda prop: prop,
        date_time=lambda prop: prop.split(".")[1][2:4],
        start_time=lambda prop: prop[2:4],
        time=lambda prop: prop[2:4],
    )
    second_fields = dict(
        second=lambda prop: prop,
        SS=lambda prop: prop,
        date_time=lambda prop: prop.split(".")[1][4:6],
        start_time=lambda prop: prop[4:6],
        time=lambda prop: prop[4:6],
    )

    year: int | None = None
    month: int | None = None
    day: int | None = None
    hour: int | None = None
    minute: int | None = None
    second: int | None = None

    for field, func in year_fields.items():
        if field in properties:
            year = int(func(properties[field]))
            break

    for field, func in month_fields.items():
        if field in properties:
            month = int(func(properties[field]))
            break
    for field, func in day_fields.items():
        if field in properties:
            day = int(func(properties[field]))
            break
    for field, func in hour_fields.items():
        if field in properties:
            hour = int(func(properties[field]))
            break
    for field, func in minute_fields.items():
        if field in properties:
            minute = int(func(properties[field]))
            break
    for field, func in second_fields.items():
        if field in properties:
            second = int(func(properties[field]))
            break

    return datetime(
        year=year or 1,
        month=month or 1,
        day=day or 1,
        hour=hour or 0,
        minute=minute or 0,
        second=second or 0,
    )