Попытка найти в CSV значение штрих-кода, а затем переименовать файлы на основе ячеек, относящихся к этому штрих-коду - PullRequest
0 голосов
/ 07 октября 2019

У меня есть набор файлов в каталоге, названный штрих-кодом, затем номер изображения. (Barcode_01.jpg, Barcode_02.jpg) и т. Д.

Я ищу поиск в формате CSV на основе части имени файла со штрих-кодом, затем, когда штрих-код найден, для переименования файла на основе информации встрока для этого штрих-кода.

Пример:

files in directory:

123456789_01.jpg
123456789_02.jpg
012345_01.jpg
012345_02.jpg
98765_01.jpg
98765_02.jpg

Штрих-коды относятся к ряду продуктов, которые в CSV также имеют код продукта и код цвета, который мне нужно переименоватьфайлы в формате {код продукта в CSV} {код цвета в CSV} {номер изображения исходного имени файла} .jpg

Эффективный поиск замены значения штрих-кода продуктоми цветовой код, сохраняя номер изображения.

Так что я использовал splitext, чтобы разобрать имена файлов и упростить их по сравнению с оригиналами, что прекрасно работает.

Я также посмотрел на xlwings иCSV для поиска значений в электронной таблице или CSV Но я не могу заставить их работать вместе.

Код, который я имею для переименования файлов, был изменен после просмотра некоторого основного шаффераучебные пособия

import os
os.chdir('[FILE DIRECTORY I NEED TO RENAME]')

for f in os.listdir('[FILE DIRECTORY I NEED TO RENAME]'):
f_name,f_ext = (os.path.splitext(f))
f_sku = (f_name.split('_')[0])
f_num = (f_name[-2:])

n_name = ('{}_{}{}'.format(f_sku,f_num,f_ext))
os.rename(f, n_name)

Я также пытался открыть с помощью dictreader и искать штрих-код в столбце 8 CSV, однако я очень плохо знаком с тем, как все это работает, и, похоже, не могу получить никаких результатов. Об этом стоит рассказать.

Я попытался сделать следующее, чтобы проверить, смогу ли я получить хотя бы несколько значений при поиске:

import csv
import os


for f in os.listdir('[file directory]'):
f_name,f_ext = (os.path.splitext(f))
f_sku = (f_name.split('_')[0])
f_num = (f_name[-2:])

with open('[file directory]','r') as csv_file:
csv_reader = csv.DictReader(csv_file)

for row in csv_file:
    if row[8] == f_sku:
        print(row)

Я определил строку поиска как'f_sku' сверху - это часть имени файла, которую я ищу в CSV. Это примерно настолько, насколько я могу получить.

РЕДАКТИРОВАТЬ: я получал ошибки с каталогами и проблемы, когда после запуска скрипта он не будет работать снова с новым изображением, установленным в каталоге, какsplit искал что-то не то, по какой-то причине он глючил.

Поэтому я откатился назад и использовал анализ файла, который был у меня в предыдущем скрипте. Я также определил каталог, чтобы сделать его более понятным.

import os
import csv

ImageDir = "IMAGE DIR"
RenDir = "RENAMED FILES DIR"

for f in os.listdir(ImageDir):
  f_name,f_ext = (os.path.splitext(f))
  f_bcode = (f_name.split('_')[0])
  f_num = (f_name[-2:])

## FINDING THE NEW FILENAME FROM THE BARDCODES CSV

   with open('CSV DIR', 'r') as 
csv_file:
      csv_reader = csv.reader(csv_file, delimiter=',')
      for row in csv_reader:
          if row[8] == f_bcode:
               n_name = row[0]+"_"+row[5]+"_"+f_num+f_ext
               os.rename(ImageDir + f,ImageDir + n_name)

1 Ответ

0 голосов
/ 07 октября 2019

Предположим, given_name - это имя, которое вы дали от f в вашем коде. Ваш код работает для определенных файлов, но не для всех. ВСЕ файлы имеют расширение после "."и все ваши файлы отделены подчеркиванием. Следовательно, вы разделяете имя на «.»и подчеркивание для отображения каждой отдельной части имени файла.

import os
import csv

for f in os.listdir('[FILE DIRECTORY I NEED TO RENAME]'):
  given_name = f

  f_name, f_ext = given_name.split(".")
  f_sku, f_num = f_name.split("_")

  with open('CSV File', 'r') as csv_file:
      csv_reader = csv.reader(csv_file, delimiter=',')
      for row in csv_reader:
          if row[8] == f_sku:
              n_name = row[0]+"_"+row[5]+"_"+f_num+"."+f_ext
...