Файлы фотошопа против PIL psd_tools - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь создать средство поиска файлов, и что касается типов файлов, перечисленных в extensions go, то, тем не менее, у меня все хорошо, как только я приступаю к сложной части попытки получить метаданные для файлов * .psd (см. раздел, помеченный ### PROBLEMATI C КОД НАЧИНАЕТСЯ ЗДЕСЬ ###), я получаю сообщение об ошибке, которое не могу решить простым поиском в Google.

На первый взгляд это был прямой выстрел с использованием psd_tools.PSDImage, увы я получаю ошибку:

raise Error("This is not a PSD or PSB file")
psd_tools.exceptions.Error: This is not a PSD or PSB file

Само по себе, что мне свойственно, поскольку elif filename.lower().endswith('.psd'): должно указывать что мы на самом деле имеем дело с * .psd. Я, конечно, предоставлю большую часть сообщения об ошибке, если это необходимо; просто дайте мне знать:)

Есть ли какие-нибудь эксперты, которым хотелось бы пролить свет на эту головоломку?

Вот мой код во всей его сомнительной славе:

#!/src/bin/env/python3

import os
import shutil
from PIL import Image
from psd_tools import PSDImage
import exiftool

extensions = [
    '.jpg',
    '.jpeg',
    '.tif',
    '.tiff',
    '.png',
    '.bmp',
    '.gif',
    '.raw'
    ]

greatest_hits = []

drive_name = os.path.expanduser('~/Documents')

for foldername, subfolders, filenames in os.walk(drive_name):
    for filename in filenames:
        for extension in extensions:
            if filename.lower().endswith(extension):
                current = os.path.join(foldername, filename)
                file_weight = str(os.path.getsize(current)/1000) + ' kB'
                im = Image.open(current)
                file_width, file_height = im.size
                # print('{:50s}{size:>10}{width:>8}{height:>8}'.format(filename, size=file_weight, width=file_width, height=file_height))
                dict_x = {'name':filename, 'path':current, 'size':file_weight, 'width': file_width, 'height': file_height}
                greatest_hits.append(dict_x)
            ### PROBLEMATIC CODE BEGINS HERE! ###
            elif filename.lower().endswith('.psd'):
                psd_im = PSDImage.load(current)
                print(psd.header)

1 Ответ

0 голосов
/ 08 февраля 2020

Вы можете найти эту ссылку интересной: https://www.pythoncentral.io/finding-duplicate-files-with-python/ Кроме того, вы можете прочитать https://www.pythoncentral.io/hashing-strings-with-python/, если вы действительно должны знать, что такое хеширование. И вы делаете.

Используя hashlib, можно сортировать файлы, используя уникальные последовательности фиксированной длины (vars), что гарантирует идентичность файла A и другого файла B, даже если файл B был переименован. Очень умный. Вернитесь через пару дней и примите этот ответ как возможное решение, если хотите:)

...