Скрипт, который сортирует фото по штрихкоду используя zbar

maxprof90

Новичок
Пользователь
Май 17, 2022
2
0
1
Доброго времени суток.

Имеется фото товаров (3 штуки на товар), одно из фото имеет штрихкод, по которому и будет сортироваться по папкам. Задача распознать штрихкод, создать папки, в качестве имени папки использовать штрихкод. Далее в эти папки переместить нужные фото товара (т.е две чистые фотки, фотку со штрихкодом удалить.)

Я не программист, а сисадмин. Прошу помочь реализовать скрипт. На данный момент застрял на том, чтобы сделать так, чтобы кусок кода обрабатывал фото в подкаталогах. Если положить скрипт в корень папки с фото, то он работает.
Для работы нужно установить Zbar

Использую следующий план:
1. Создаю папки по формуле количество файлов разделить на 3. Таким образом в каждой папке будет по 3 файла.
2. Распознать штрихкод в подкаталогах и присвоить имя папке соответствующее штрихкоду
3. Удалить фото со штрихкодом.

Вот какой код имею.

Python:
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)
 
 
 
 # Тут должен быть код, который удалит файлы со штрихкодом
 

maxprof90

Новичок
Пользователь
Май 17, 2022
2
0
1
Нашел код, который выводит файлы из подкаталогов. Как сделать так, чтобы эти файлы потом были обработаны, а распознанный штрихкод присвоился именно той папке, которая соответствует содержимому? Например, папка с именем 1 перименуеться на штрихкод 562852316165, потому, что в той папке файл с этим штрихкодом.

Python:
for top, dirs, image_files in os.walk("D:\\Phyton\\IMAGES\\"):
    for nm in image_files:       
         print (os.path.join(top, nm))
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
переименовывание директории - os.rename("oldname","newname")
 

Форум IT Специалистов