Проверить строку даты с помощью Python - PullRequest
0 голосов
/ 30 октября 2019

У меня есть python dict, в котором есть три ключа 'image1', 'image2' и 'Подобие'. Диктовки были сгенерированы из duplicate-image-finder , поэтому значения dict для image1 & 2 состоят из строки расположения папки, которая выглядит примерно так:

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

Пример структуры папок:

Folders

Я использую datetime.strptime, чтобы проверить, заканчиваются ли папки на <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 спросите, какой файл сохранить. Вместо того, чтобы делать это, существует ли хорошая функция выбора, которая может отображать миниатюру и позволяет выбирать изображение?

1 Ответ

0 голосов
/ 11 ноября 2019

Вы можете использовать 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]
    ...

Редактировать Функцию проверки можно немного реструктурировать, но если вы не можете гарантировать, что необходим правильный формат для strptime блоков try / catch:

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
...