Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491

difflib не находит совпадений в строке с абс. путем у имени файла

30.07.2023, 12:55. Показов 414. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Нашел себе задачку для практики, она работает только на половину.
Есть энное количество картинок с разными названиями и есть энное количество наименований в экселе, к которым возможно подойдут те или иные картинки.
По написанному скрипту дифлиб находит совпадения только если найденная картинка выглядит без абсолютного пути picture.jpg, например. Но так как я результат хочу записать в таблицу, чтобы потом сравнить визуально, как и что было найдено, мне нужно как-то сохранить и путь, из какой из папок была найдена та или иная картинка.
К сожалению, абсолютный путь никак не удается привязать к элементу списка, где я сохраняю имя картинки.
В общем, проблема: если сохранять C:/pictures/folder1/picture.jpg, то он не найдет совпадений, а стоит указать просто picture.jpg, то совпадения находятся.
Может быть есть у кого-то идеи, как можно путь держать поближе к найденному элементу, чтобы его тоже вписать в эксель?


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#Searching for pictures in nested folders and saving their names into the list pictures +
#Saving the names of items from excel into the ist artikels + 
#Comparing names of pictures with difflib +
#If they match then save into a list results item names, picture names and absolute pathes
 
import os
import openpyxl as xml
import difflib as lib
 
rowNumber = 10
results = []
pictures = []
artikels = []
dict_pics = {} #may be it could work
count = 0
match = 0
total = 0
 
def look_for_pics():
    #Searching for pictures in nested folders
    path = os.getcwd()
 
    for dirpath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            tmp = os.path.join(dirpath, filename)
            if os.stat(tmp).st_size > 0 and ('.png' in tmp or '.jpg' in tmp or '.jpeg' in tmp or '.pdf' in tmp or 'webp' in tmp or 'bmp' in tmp or 'tif' in tmp) :
                #saving their names in a collection
                pictures.append(os.path.basename(tmp)) #it works
                #pictures.append(str(dirpath) + ' ' + str(filename)) #it doesn't work
                #pictures.append(tmp) - it doesn't work
 
    print('Pictures: ', len(pictures))
 
    wb = xml.load_workbook('bildlose_artikel.xlsx')
    sheet = wb['Tabelle1']
    rows = sheet.max_row   
 
    #Saving the names of items from excel into a collection
    for rowCell in sheet['A2':'C'+str(rows)]:
        tmp2 = ''
        for cellObj in rowCell:
            tmp2 += ' ' + str(cellObj.value) 
        artikels.append(tmp2)
 
    print('Artikels: ', len(artikels))
 
    for art in artikels:
        print("Progress: ", str(float('%.2f' % (count/len(artikels)*100))), ' %     Matches: ', str(match))
        splits = str(art).split() #Every item has three columns of description that can help to find a match, numbers, dates, descriptions
        for split in splits:
            found = lib.get_close_matches(split, pictures) #Here we compare every splitted string from descriptions with picture names
            count += 1 
            if len(found) != 0: #sometimes there are similar picture names with different formats like pic.jpg and pic.png
                for f in range(len(found)):
                    match += 1
                    results.append((found[f], art))
                    wb = xml.load_workbook('matches.xlsx')
                    sheet = wb['First scheet']
                    artRow = 'A'+str(match)
                    picRow = 'B'+str(match)
                    pathRow = 'C'+str(match)
                    sheet[artRow].value = str(art)
                    sheet[picRow].value = str(found[f])
                    #sheet[dic_pic].value = str(path_to_matched_pic)
                    wb.save("matches.xlsx")
                    wb.close()
 
    print("Matches: ", len(results))
Добавлено через 16 минут
Словарь не подошел, потому что названия картинок могут совпадать, если находятся в разных папках. Это если я их как ключ бы использовал.

Добавлено через 2 часа 56 минут
Ладно, в качестве костыля, записываю полный путь, как дополнительный элемент списка.
При нахождении соответствия я нахожу индекс по значению и добавляю единицу, так как полный путь к нему будет следующим элементом. Больше ничего не придумал.

Python
1
tmpPic = pictures[pictures.index(found[f])+1]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2023, 12:55
Ответы с готовыми решениями:

Имя файла из полного имени файла(с путем)
Может есть у кого готовая функция, или встроенная на VB

Сравнить два бинарных файла и вывести в label количество не совпадений, или что нет не совпадений
Добрый день ! Прошу помощи в реализации задачи. В программе нужно сравнить два файла (разной длины, или одинаковой). Количество...

Регулярное выражение не находит совпадений
Здравствуйте. Есть код: TRegExpr *clearSite = new TRegExpr(); clearSite->Expression = _T("(^+$)"); clearSite->ModifierM = true; ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2023, 12:55
Помогаю со студенческими работами здесь

Рег.выражение не находит совпадений
Здравствуйте. <?php $template = file_get_contents("template.html"); echo $template ; if(preg_match('/\/',$template)) { echo...

Поиск совпадений имени и фамилии
Здравствуйте,помогите,пожалуйста с задаче: Сведения о каждом ученике школы состоят из его имени, фамилии и названия класса ( года обучения...

сравнение не находит совпадений, даже если они есть
Функция search всегда возвращает -1 (нет совпадений) даже когда они есть. Почему? Те места, где могут быть проблемы, отметил коммами с...

Расширение в имени файла в адресной строке
Почему на некоторых сайтах в адресной строке отображается например : http://mysite.com.ua/filename без расширения я просто делаю сайт а...

Картинка как-то криво появляется,Граф АБС и АБС Объект
Есть код: uses ABCObjects, GraphABC; var p: PictureABC; speed: integer; procedure KeyDown(Key: integer);


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru