【发布时间】:2021-08-05 06:23:06
【问题描述】:
所以,我有一个带有成对匹配图像(或多或少相同)的 csv 文件,如下所示:
File1;File2
File3;File4
File5;File1
File2;File5
...
我想根据这些数据删除重复的图像。 csv 文件来自第三方程序,该程序根据内容匹配图像,但问题是它只匹配对,如果文件之前匹配过,则忽略(即三个以上重复的组没有一起列出)
关键点是上例中的第三行和第四行,其中File1也匹配File5,File2匹配File5,所以三个文件都是重复的。但如果我只是根据数据删除文件,我可能会删除所有文件(如果我删除每行的第二个)。
所以我正在尝试列出一组匹配文件,以确保我始终保留其中一个。上面的例子应该是这样的:
File1;File2;File5
File3;File4
...
这是我的代码,似乎没有这样做。 csv 文件被读入成对列表 (_data)。最后的列表是 self.__map。
_exists = [ ]
for _match in _data:
_first = _match[ 0 ] in _exists
_second = _match[ 1 ] in _exists
if not _first and not _second:
self.__map.append( _match )
_exists.append( _match[ 0 ] )
_exists.append( _match[ 1 ] )
elif _first and not _second:
for _node in self.__map:
if _first in _node:
_node.append( _match[ 1 ] )
_exists.append( _match[ 1 ] )
break
elif _second and not _first:
for _node in self.__map:
if _second in _node:
_node.append( _match[ 0 ] )
_exists.append( _match[ 0 ] )
break
看不出为什么它不起作用,但是当我检查 self.__map 时,它不包含 csv 文件中的所有文件。
可能有一种更简单的方法可以做到这一点,所以请随意提出更好的方法。
【问题讨论】:
-
您可能想使用像
networkx这样的库来查找循环。 -
谢谢,我怀疑会有类似networkx的东西存在。我对它不够精通,无法掌握我需要的东西,但也许我设法在stackoverflow.com/a/6206011/4038380 找到使用它解决的相同类型的问题
标签: python python-3.x list duplicates combinations