В настоящее время я пишу код для сканирования файлов во входной папке и копирования изображений, которые соответствуют требованиям (список «правил»), в другой каталог. Если файл не выполняет sh какого-либо заданного требования, об этом следует сообщить в logfile.txt, указав что-то вроде:
Error number 1, file -> data\0055\0100.jpg
, но с моим текущим кодом я получаю повторяющиеся выходные данные в лог-файл, без связи с правилом это не выполняется. Итак, для каждого файла в лог-файле у меня есть:
Error number 1, file -> data\0055\0100.jpg
Error number 2, file -> data\0055\0100.jpg
Error number 3, file -> data\0055\0100.jpg
Итак, как мне записать каждую запись в лог-файл с отдельным номером «правила» без повторений? Кроме того, как мне проверить, существует ли уже скопированный файл в output_dir?
Мой текущий код:
import os
from glob import glob
from PIL import Image
import shutil
from tqdm import tqdm
input_dir = 'data'
output_dir = 'out'
try:
if os._exists(output_dir) == False:
os.mkdir(output_dir)
except FileExistsError:
print('Directory "out" already exists! Proceeding with script')
logfile = open('logfile.txt','w+')
ext = ('jpg', 'jpeg', 'JPG', '.PEG')
dirs = sorted(glob(os.path.join(input_dir, '**/*.jpg'),
recursive=True))
def checker(input_dir, output_dir, logfile):
for i, file in tqdm(enumerate(input_dir), desc='Processing copied files!',
total=len(input_dir)):
rules = [file.endswith(ext),
os.path.getsize(file) >= 10000,
Image.open(file),
]
if all(rules):
# shutil.copy(file, output_dir)
new_filename = str(i).zfill(6) + '.jpg'
shutil.copy(file, os.path.join(output_dir, new_filename))
else:
for i, rule in enumerate(rules):
logfile.write(f'\nError number {i+1}, file -> {file}\n')
checker(dirs, output_dir, logfile)
Спасибо за внимание, если вы читаете это!