Имеется фото товаров (3 штуки на товар), одно из фото имеет штрихкод, по которому и будет сортироваться по папкам. Задача распознать штрихкод, создать папки, в качестве имени папки использовать штрихкод. Далее в эти папки переместить нужные фото товара (т.е две чистые фотки, фотку со штрихкодом удалить.)
Я не программист, а сисадмин. Прошу помочь реализовать скрипт. На данный момент застрял на том, чтобы сделать так, чтобы кусок кода обрабатывал фото в подкаталогах. Если положить скрипт в корень папки с фото, то он работает.
Для работы нужно установить Zbar
Использую следующий план:
1. Создаю папки по формуле количество файлов разделить на 3. Таким образом в каждой папке будет по 3 файла.
2. Распознать штрихкод в подкаталогах и присвоить имя папке соответствующее штрихкоду
3. Удалить фото со штрихкодом.
Вот какой код имею.
import os import subprocess import glob import locale from math import ceil, floor folder_address = "D:\\Phyton\\IMAGES\\" # адрес папки, где нужно обработать фото directory = os.fsencode(folder_address) i = 0 files_in_folder = 3 # можно менять значение, сколько файлов должно быть в папке. num_of_files = num_of_files = len([name for name in os.listdir(directory) if os.path.isfile(os.path.join(directory, name))]) for x in range(ceil(num_of_files / files_in_folder)): path = folder_address + "\\" + str(x+1) if not os.path.exists(path): os.mkdir(path) files = (file for file in os.listdir(directory) if os.path.isfile(os.path.join(directory, file))) for file in files: file_name = os.fsdecode(file) file_path = os.path.join(folder_address, file_name) new_file_path = os.path.join(folder_address, str(floor(i / files_in_folder) + 1), file_name) os.rename(file_path, new_file_path) i += 1 encoding = locale.getdefaultlocale()[1] # до этого момента код работает, теперь нужно зайти в подкаталоги, распознать штрихкод и переименовать папку # Функция распознавания штрихкода def get_code(file): try: raw_code = subprocess.check_output(["C:\\Program Files (x86)\\ZBar\\bin\\zbarimg", "-q", \ file]) raw_code = raw_code.rstrip() raw_code = raw_code.decode(encoding) code = raw_code.split(':',1)[1] return(code) except: return("unreadable_code") # скорее всего тут нужно использовать рекурсивный обход папок image_files = glob.glob('*.JPG') + glob.glob('*.png') print(image_files) for file in image_files: file_path = os.path.join(os.getcwd(), file) code = get_code(file) # Здесь нужно переименовать существующие папки и присвоить им штрихкод folder = os.path.join(os.getcwd(), code) os.makedirs(folder, exist_ok=True) # Тут должен быть код, который удалит файлы со штрихкодом