在Python中列出列表中的重复文件

时间:2015-06-28 22:17:11

标签: python

我正在尝试将具有相似名称的所有文件列入单独的文件夹,但无法找出移动它们的名称。 从下面我将在我的工作目录中创建具有重复名称的文件夹,然后通过拆分函数传递所有文件以从xmlName = xml.split('.')[1]行获取名称的中间部分。现在xmlName只有部分文件名,这有助于我决定重复名称。

以下是工作目录中的文件列表:

# ls
CRON.JC_ADA_SOURCE_DLOAD.xml            Duplicate                                   TERA.SC_CACHE_PURGE_01.xml
CRON.JC_ADA_SOURCE_WLOAD.xml            POWE.BI_RUN_INFO_WKFLW_INF1.xml  test.py
CRON.SC_ADA_CLEANUP_SCRIPT.xml          POWE.JC_ADA_SOURCE_DLOAD.xml            Unknown
CRON.SC_CACHE_PURGE_01.xml              POWE.SC_CHECK_ADA_DATA_FILE_INF2.xml
#

以下是代码(我不知道如何仅列出重复文件)。

#!/usr/bin/python

import os, sys

Working_Dir = "/home/export/Partition/JobDefinition"

if not os.path.exists('./Duplicate'):
    os.makedirs('./Duplicate', 0755)

for path, dir, files in os.walk(Working_Dir):
    for xml in files:
        xmlName = xml.split('.')[1]
        if xmlName == xmlName:
            print xmlName

输出:

# python test.py
SC_ADA_CLEANUP_SCRIPT
SC_CHECK_ADA_DATA_FILE_INF2
JC_ADA_SOURCE_WLOAD
BI_RUN_INFO_WKFLW_INF1
JC_ADA_SOURCE_DLOAD
SC_CACHE_PURGE_01
JC_ADA_SOURCE_DLOAD
SC_CACHE_PURGE_01
py
#

我需要的是什么输出在名称下面,以便我可以将相应的文件移动到Duplicate文件夹:

JC_ADA_SOURCE_DLOAD
SC_CACHE_PURGE_01

3 个答案:

答案 0 :(得分:1)

懒人答案

collections.Counter将通过魔法做你想做的事。

MMDrawerController

不那么懒惰的答案

使用import collections c = collections.Counter([]) for path, dir, files in os.walk(Working_Dir): c += collections.Counter([xml.split('.')[1] for xml in files])

跟踪每个唯一文件
set

答案 1 :(得分:0)

如果你只想要重复,你可以在你找到它们时存储名称(设置最合适,但列表会这样做);如果你要放入的东西已经存在,那就是重复。

答案 2 :(得分:0)

如果您试图在列表中找到重复的元素,并仅为那些重复的元素创建其他列表,那么您可以这样做:

我在其中列出了a列表,其中包含两个重复元素23。我在list a中找到了这些元素,并创建了另一个列表b,它只包含这两个元素。

import collections
a = [1,2,3,4,5,6,2,3,]
b = [item for item, count in collections.Counter(a).items() if count > 1]

当您打印b时,输出为:

[2, 3]

然后,如果您还要从a中删除重复的元素,则可以使用set执行此操作:

a = set([1,2,3,4,5,6,2,3,])

现在,当您打印a时,输出为:

set([1, 2, 3, 4, 5, 6])