好的,情况就是这样:
我们说我有一张名为" File_info"其中包含所有匹配label_set
的文件的列表表: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 Query查找具有重复标签的所有文件:
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)使用pandas创建一个dict,格式为:
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)在数据库中实施更改:
我有两个想法:
a)删除表格中的所有重复条目
b)在Filename和Label_number列中插入所有dict键和值
a)只需开始对每个键'进行查询。我的数据库中我的dict(包含文件名)的值,如果找到,则使用值
更新标签列b)从表中删除重复的条目
我知道会有第三种最优雅的方式来做到这一点,我正在寻找相同的:-)
请记住:我有一百万条记录需要处理!!这两种方法虽然有效,但效率不高,因为我必须运行几个这样的查询。我正在寻找一些快速的简短答案
希望我提供的信息也可以帮助其他人!