Форум сайта python.su
0
xam1816Да. вопрос с сортировкой снимается. Если использовать файлы с правильным именем (формата IMG_20220525_112719), файлы делятся правильно.
Офлайн
0
архив фото с правильными именами
Прикреплённый файлы:
IMAGES.rar (682,8 KБ)
Офлайн
124
maxprof90позже код выложу
архив фото с правильными именами
Офлайн
124
import os import shutil from PIL import Image from pyzbar import pyzbar ROOT_PATH = r"/home/xam/Загрузки/test_folder" TARGET_PATH = os.path.join(ROOT_PATH, 'IMAGES') OUT_PATH = os.path.join(ROOT_PATH, 'out') def get_filenames(dir_path): return sorted(os.listdir(dir_path)) def split_into_blocks(fname_lst): return [fname_lst[n:n+3] for n in range(0, len(fname_lst), 3)] def get_code_from_img(image): out = pyzbar.decode(Image.open(image)) if out: return out[0].data.decode() def find_code_from_block(block): for im in block: code = get_code_from_img(os.path.join(TARGET_PATH, im)) if code: return code def create_code_folder(code): dir = os.path.join(OUT_PATH, code) if not os.path.exists(dir): os.makedirs(dir) return dir def create_bad_folder(): dir = os.path.join(OUT_PATH, 'bad') if not os.path.exists(dir): os.makedirs(dir) return dir def copy_img_from_block(block, dir): for img in block: shutil.copy(os.path.join(TARGET_PATH, img), dir) def main(): image_blocks = split_into_blocks(get_filenames(TARGET_PATH)) for block in image_blocks: code = find_code_from_block(block) if code: code_folder_path = create_code_folder(code) copy_img_from_block(block, code_folder_path) else: bad_folder = create_bad_folder() copy_img_from_block(block, bad_folder) if __name__ == '__main__': main()
Отредактировано xam1816 (Май 26, 2022 13:07:32)
Офлайн
0
Круто, работает! Спасибо!!!
Подскажите, что следует дописать, чтобы фотки со штрихкодами удалить в подкаталогах и осталось только по две чистых фотки. Фотка со штрихкодом у меня была в качестве маркера.
Офлайн
124
maxprof90заменить функции на эти
только по две чистых фотки.
def find_code_from_block(block): for img in block: code = get_code_from_img(os.path.join(TARGET_PATH, img)) if code: return code, img return None, None
def copy_img_from_block(block, dir, img_ignore = None): for img in block: if img != img_ignore: shutil.copy(os.path.join(TARGET_PATH, img), dir)
def main(): image_blocks = split_into_blocks(get_filenames(TARGET_PATH)) for block in image_blocks: code, img_name = find_code_from_block(block) if code: code_folder_path = create_code_folder(code) copy_img_from_block(block, code_folder_path, img_name) else: bad_folder = create_bad_folder() copy_img_from_block(block, bad_folder)
Офлайн
0
Спасибо большое!!!
Офлайн