我已经编写了代码来找出两个给定文件夹(路径)之间的公共文件,这些文件占所有级别的子文件夹(如果存在的话)。在
请建议是否有更有效的方法。如果给定具有多个子文件夹级别的文件夹,则花费的时间太长。在
def findCommonDeep(self,path1,path2):
commonfiles = []
for (dirpath1, dirname1, filenames1) in os.walk(path1):
for file in filenames1:
for (dirpath2, dirname2, filenames2) in os.walk(path2):
if (file in filenames2 and isfile(join(dirpath2, file))):
commonfiles.append(file)
print(commonfiles)
并使用路径调用此函数,如下所示:
^{pr2}$我知道,如果我为任何给定的路径存储一个所有文件的列表,那么执行速度就会降低。但我想那会耗尽你的记忆。请引导我更有效地处理这个问题。在
可以使用生成器表达式将
os.walk
的输出转换为两个集合,并使用集合交集有效地标识公共路径。在要减少上述代码中的代码重复,可以使用另一个列表理解:
^{pr2}$如果只查找公共文件名而不是公共路径名,则可以使生成器表达式只输出文件名:
这是更有效的,因为它利用了Python的set intersection操作,它的平均值为
O(min(len(n), len(m))
,而具有2个嵌套循环的代码总是使用O(n^2)
。在相关问题 更多 >
编程相关推荐