2015-06-28 77 views
1

我想列出具有類似名稱的所有文件到單獨的文件夾中,但無法找出移動它們的名稱。 從下面我正在我的工作目錄中創建具有重複名稱的文件夾,然後通過分割功能傳遞所有文件以獲得xmlName = xml.split('.')[1]行的名稱中間部分。現在xmlName只有文件名的一部分,這有助於我決定重名。從列表中列出Python中的重複文件

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

# 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 
# 

我需要的輸出低於名字,這樣我就可以使相應的文件複製文件夾:

JC_ADA_SOURCE_DLOAD 
SC_CACHE_PURGE_01 

回答

0

如果只想重複,你可以存儲名字,你在某些東西中找到它們(設置將是最合適的,但列表將會執行);如果你準備投入的東西已經存在,那就是重複的。

+0

感謝您指導斯科特。我對Python非常陌生,因此不確定如何使用set,但是現在我知道set必須被使用,我會找到它的用法。 – ankitpandey

1

懶惰的答案

collections.Counter會做你想要什麼,用魔法。

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

seen = set() 
duplicates = set() 
for path, dir, files in os.walk(Working_Dir): 
    for xml in files: 
     xmlName = xml.split('.')[1] 
     if xmlName in seen: 
      duplicates.add(xmlName) 
     seen.add(xmlName) 
+0

感謝您提供代碼。我試圖用較少的懶惰答案去,但以下是錯誤。我對Python非常陌生。 seen.add(xmlName) AttributeError:'dict'對象沒有屬性'add' – ankitpandey

+0

感謝您的修改。我試圖打印重複變量,下面是輸出:如何將這兩個文件移動到重複文件夾? '#蟒test.py了 組([]) 組([]) 組([]) 組([]) 組([]) 組([]) 組([ 'JC_ADA_SOURCE_DLOAD' ]) set(['SC_CACHE_PURGE_01','JC_ADA_SOURCE_DLOAD']) set(['SC_CACHE_PURGE_01','JC_ADA_SOURCE_DLOAD']) – ankitpandey

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])