Хорошо, вот такая ситуация:
Допустим, у меня есть таблица с именем "File_info", которая содержит список всех файлов с соответствующими им label_set
TABLE: FILE_INFO
FILENAME LABEL_NUMBER
----------------------------------------------------------------------
C:/Test_Software/6.avi 11
C:/Test_Software/6.avi 10
C:/Test_Software/6.avi 8
C:/Test_Software/6.avi 6
C:/26.avi 10
C:/26.avi 8
C:/Test_Software/Debug/Current_Frame2.avi 11
C:/Test_Software/Debug/Current_Frame2.avi 10
C:/Test_Software/Debug/Current_Frame1.avi 11
C:/Test_Software/Debug/Current_Frame1.avi 10
C:/Test_Software/26.avi 11
C:/Test_Software/26.avi 10
C:/Test_Software/26.avi 9
C:/Test_Software/26.avi 8
C:/Test_Software/26.avi 6
Моя цель заключается в достижении этой структуры в таблице SQLITE:
FILENAME LABEL_NUMBER
----------------------------------------------------------------------
C:/Test_Software/6.avi 11,10,8,6
C:/26.avi 10,8
C:/Test_Software/Debug/Current_Frame2.avi 11,10
C:/Test_Software/Debug/Current_Frame1.avi 11,10
C:/Test_Software/26.avi 11,10,9,8,6
т.е. один файл должен храниться только один раз !!!
Итак, вот шаги, которые я выполнил, чтобы по крайней мере получить желаемый результат:
1) Найдите все файлы с дублирующими метками, используя SQL-запрос:
SELECT LABEL_NUMBER, FILENAME
FROM FILE_INFO WHERE
FILENAME
in (SELECT FILENAME
FROM FILE_INFO_SEARCH GROUP BY
FILENAME HAVING COUNT(*)>1)
2) Создайте два списка (a для file_list, b для label_list)
for file in find_duplicate_files: #Duplicate_Files contains the output of above SQL Query
process_file.append(file[1])
process_label.append(file[0])
3) Создайте дикт, используя панд, который будет иметь формат:
df = pd.DataFrame({'A' : process_file, 'B' : process_label})
new_dict = df.groupby('A').B.agg(','.join).to_dict()
Покамой вывод выглядит следующим образом:
C:/Test_Software/6.avi 11,10,8,6
C:/26.avi 10,8
C:/Test_Software/Debug/Current_Frame2.avi 11,10
C:/Test_Software/Debug/Current_Frame1.avi 11,10
C:/Test_Software/26.avi 11,10,9,8,6
Но теперь я остался с последней частью задачи:
4) Внесите изменения в базу данных:
У меня есть две мысли здесь:
Метод: 1
a) Удалить все повторяющиеся записи в таблице
b) Вставьте все ключ и значения dict в столбец Filename и Label_number
Метод: 2
a) Просто запустите запрос для каждого значения ключа моего dict (котороесодержит имя файла) в моей базе данных, и, если найден, обновите столбец меток значением
b) Удалите дублирующиеся записи из таблицы
Я знаю, что будет третий самый элегантный способ сделатьэто, и я ищу то же самое :-)
Помните: у меня есть миллион этих записей для обработки !!Оба метода пока работают, но не эффективны, так как мне нужно выполнить несколько таких запросов.Я ищу короткие ответы, которые бывают быстрыми
Надеюсь, что предоставленная мною информация поможет другим и там !!!