Доброго времени суток.
Имеется фото товаров (3 штуки на товар), одно из фото имеет штрихкод, по которому и будет сортироваться по папкам. Задача распознать штрихкод, создать папки, в качестве имени папки использовать штрихкод. Далее в эти папки переместить нужные фото товара (т.е две чистые фотки, фотку со штрихкодом удалить.)
Я не программист, а сисадмин. Прошу помочь реализовать скрипт. На данный момент застрял на том, чтобы сделать так, чтобы кусок кода обрабатывал фото в подкаталогах. Если положить скрипт в корень папки с фото, то он работает.
Для работы нужно установить Zbar
Использую следующий план:
1. Создаю папки по формуле количество файлов разделить на 3. Таким образом в каждой папке будет по 3 файла.
2. Распознать штрихкод в подкаталогах и присвоить имя папке соответствующее штрихкоду
3. Удалить фото со штрихкодом.
Вот какой код имею.
Имеется фото товаров (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)
# Тут должен быть код, который удалит файлы со штрихкодом