Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将已筛选的重复文件列表与其对应的路径连接起来?_Python_List_Scripting - Fatal编程技术网

Python 如何将已筛选的重复文件列表与其对应的路径连接起来?

Python 如何将已筛选的重复文件列表与其对应的路径连接起来?,python,list,scripting,Python,List,Scripting,我创建了一个脚本来检查我的存储库中以.js扩展名结尾的所有文件。然后,它将文件从其路径&中分离出来,只返回重复的文件 这工作正常,但我想将返回的重复文件列表与其各自的路径连接起来。为简单起见,我只包含了一个列表,表示我项目中的所有文件: // a list representing all my project files ending with .js extension filePaths = [ 'integration/appointment/user-daily.js', '

我创建了一个
脚本
来检查我的存储库中以
.js
扩展名结尾的所有文件。然后,它将文件从其
路径
&
中分离出来,只返回重复的文件

这工作正常,但我想将返回的重复文件
列表
与其各自的
路径
连接起来。为简单起见,我只包含了一个
列表
,表示我项目中的所有文件:

// a list representing all my project files ending with .js extension

filePaths = [
  'integration/appointment/user-daily.js',
  'integration/scheduler/user-daily.js', 
  'integration/time-off-types/time-off-types.js',
  'integration/billing-types/billing-cycle.js',
  'integration/accounting/client-yearly.js',
  'integration/exports/client-weekly.js',
  'integration/user-schedule/client-weekly.js',
]

fileNames = []

for i in range(len(filePaths)):
    fileNames.append((filePaths[i].split('/'))[-1])

    duplicatedFiles = filter(lambda rec : fileNames.count(rec) >1 ,fileNames)


print(duplicatedFiles)

这是我得到的当前
输出

['user-daily.js', 'user-daily.js', 'client-weekly.js', 'client-weekly.js']
但我需要获取它们的完整
路径

['integration/appointment/user-daily.js', 'integration/appointment/user-daily.js', 'integration/user-schedule/client-weekly.js', 'integration/user-schedule/client-weekly.js']

我已尝试加入他们的
路径
,但无法使其正常工作

这就是你要找的吗

从集合导入defaultdict
filename\u to\u path=defaultdict(列表)
对于文件路径中的文件路径:
key=filePath.split('/')[-1]
文件名\u到\u路径[key]。追加(文件路径)
重复项=[]
对于文件名为\u到\u路径的文件。值()
如果len(文件)>1:
重复。扩展(文件)
打印(副本)
输出:

['integration/appointment/user-daily.js', 'integration/scheduler/user-daily.js', 'integration/exports/client-weekly.js', 'integration/user-schedule/client-weekly.js']

您可以使用dict首先跟踪文件名,如下所示

    filePaths = [
        "integration/appointment/user-daily.js",
        "integration/scheduler/user-daily.js",
        "integration/time-off-types/time-off-types.js",
        "integration/billing-types/billing-cycle.js",
        "integration/accounting/client-yearly.js",
        "integration/exports/client-weekly.js",
        "integration/user-schedule/client-weekly.js",
    ]

    fileNames = {}
    for fp in filePaths:
        name = (fp.split("/"))[-1]
        fileNames[name] = fileNames[name] + 1 if name in fileNames else 1

    duplicatedFiles = list(filter(lambda x: fileNames[x.split("/")[-1]] > 1, filePaths))
    print(duplicatedFiles)

如果我理解正确:

>>> import os
>>> from collections import Counter
>>> basenames = {full: os.path.split(full)[1] for full in filePaths}
>>> counts = Counter(basenames.values())
>>> [full for full, base in basenames.items() if counts[base] > 1]
['integration/appointment/user-daily.js', 'integration/scheduler/user-daily.js', 'integration/exports/client-weekly.js', 'integration/user-schedule/client-weekly.js']

请与您期望的结果进行比较,我认为这是错误的。

可能只有我一个人,但我发现这个问题非常令人困惑。您说您将文件从其路径拆分,现在您想再次将其与路径合并?那么为什么一开始就要分开呢?你能再次检查一下你的预期结果吗?它们都有相同的路径。这是你想要的吗?thanks@timgeb是的,我同意这可能会让人困惑。。。我必须将文件与其路径分开,因为它们的路径可能不同,但我只想检查项目中是否有同名的重复文件,而不管路径如何。如果我在执行检查之前保留路径,我将永远不会获得那些重复的文件。因此,问题是如何在
filePath
中获取basename多次存在的字符串?@timgeb我试图实现的是获取项目中所有重复的名称文件,而不管它们的路径如何。更清楚吗?也许我的方法是不正确的,但基本上这就是为什么我要努力实现!这正是我一直在寻找的!非常感谢你!你能给我解释一下密码吗?当然。创建从文件名到以文件名结尾的路径列表的映射。然后,遍历映射以查找重复项。如果每个值有超过1个文件路径,则它们是重复的。希望这有帮助。