使用Python验证日期字符串

2024-04-18 22:24:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python dict,它有三个键“image1”、“image2”和“similarity”。dict是从duplicate-image-finder生成的,因此image1&2 dict值由一个文件夹位置字符串组成,看起来与此类似。你知道吗

../../Amazon Drive/Tony Leaving Do Nov 2018/IMG_20181108_185110.jpg

文件夹结构示例:

Folders

我正在使用日期时间.strtime测试文件夹是否以<month> <year>结尾,因为我可能希望在这些文件夹中保留图像。我的计划是复制包含“ToSort”的文件夹中存在的图像,而不必手动检查每个副本。下面的工作,但感觉有点笨重。有更好的办法吗?你知道吗

我的验证功能


def validate_date(data):
    try:
        datetime.strptime(data[0] + ' ' + data[1], '%b %Y')
    except ValueError:
        pass
    else:
        return True

    try:
        datetime.strptime(data[0] + ' ' + data[1], '%B %Y')
    except ValueError:
        pass
    else:
        return True

    return False

函数调用


if images_list["similarity"] == 100:

    # Get date from folder name
    f1_date = images_list["image1"].split("/")[-2].split(" ")[-2:]

    img1_folder_valid = validate_date(f1_date)

    if img1_folder_valid is True and "ToSort" or "WhatsApp - Various" in images_list["image2"]:
        print("Adding {} to deletion list\n".format(images_list["image2"]))
        to_delete.add(images_list["image2"])


之后,我使用PIL库打开每个文件进行手动比较。然后使用while True循环询问要保留哪个文件。与其这样做,是否存在一个好的选择器功能,可以显示缩略图,并允许选择一个图像?你知道吗


Tags: 图像文件夹truedatadatereturn手动folder
1条回答
网友
1楼 · 发布于 2024-04-18 22:24:36

可以使用glob列出路径后面的所有文件夹。 这样可以避免对同一文件夹进行两次检查。你知道吗

import glob

folders = glob.glob('../../Amazon Drive/**/',recursive=True) # Python3 accepts the recursive arg

然后你可以查名字。你知道吗

for folder in folders: # and other conditions ...
    folder_is_valid = validate_date(folder)

然后,实现该函数的一种更具可读性的方法是使用路径作为输入。你知道吗

def validate_date(folder):
    folder_name = folder.split('/')[-2]
    ...

编辑 validate函数可以稍微重新构造,但除非您能够确保try/catch blocs的strtime格式正确,否则:

def validate_date(data):
    try:
        datetime.strptime(data[0] + ' ' + data[1], '%b %Y')
        return True
    except ValueError:
        pass

    try:
        datetime.strptime(data[0] + ' ' + data[1], '%B %Y')
        return True
    except ValueError:
        pass        

    return False

相关问题 更多 >