2012-05-03 89 views
1

試想一下幾個文件夾,如掃描文件名重複

d:\myfolder\abc 
d:\myfolder\ard 
d:\myfolder\kjes 
... 

而且每個文件夾中,也有文件,如

0023.txt, 0025.txt, 9932.txt in d:\myfolder\abc 
2763.txt, 1872.txt, 0023.txt, 7623.txt in d:\myfolder\ard 
2763.txt, 2873.txt, 0023.txt in d:\myfolder\kjes 

所以,有三個0023.txt文件和兩個2763.txt文件。

我想創建一個文件(比如說,d:\myfolder\dup.txt),它包含以下信息:

0023 3 
0025 1 
9932 1 
2763 2 
1872 1 
7623 1 
2873 1 

我如何可以實現在Python?謝謝。

+0

您正在查找具有相同名稱的文件。 –

回答

1

沒有廣泛的測試,但這個工程:

import os, os.path 

dupnames={} 
for root, dirs, files in os.walk('myfolder'): 
    for file in files: 
     fulpath=os.path.join(root,file) 
     if file in dupnames: 
      dupnames[file].append(fulpath) 
     else: 
      dupnames[file]=[fulpath] 

for name in sorted(dupnames): 
    print name, len(dupnames[name]) 

這工作以下列方式:

  1. 創建一個空的字典;
  2. 漫步文件層次結構;
  3. 使用base name: [path to file]在列表字典中創建條目(或附加現有列表)。

os.walk你將有一個字典,像這樣:

{0023.txt: ['d:\myfolder\abc', 'd:\myfolder\kjes'], 0025.txt: ['d:\myfolder\abc']} 

所以讓你的輸出,只是遍歷排序字典並計算列表中的條目。您可以將其輸出重定向到一個文件或直接用Python打開輸出文件。

您顯示您的輸出的擴展名剝離 - 0023 vs 0023.txt。如果您有0023.txt0023.py,會發生什麼?相同的文件或不同?對於操作系統他們是不同的文件,所以我保留了擴展名。如果那是你想要的輸出,它很容易被剝離。

0

第1步:使用glob.glob找到的所有文件 第2步:創建每個文件名的最後部分一本字典(最後一個除法後) 第3步:經過文件路徑的列表,找到所有重複。

0
import os 
import collections 
path = "d:\myfolder" 
filelist = [] 
for (path, dirs, files) in os.walk(path): 

    filelist.extend(files) 
filecount = collections.Counter(filelist) 
+1

這個解決方案非常好,但是語法不正確:'filelist.append [files]'不運行,無論如何你可能想要'extend'而不是'append'(並且你應該捕獲' (文件列表)'否則這是一個毫無意義的操作)。 – huon

+0

@dbaupp謝謝tou的建議 – shiva

+2

它應該是'filelist。擴展(文件)' –