2015-07-11 43 views
0

我正在試圖編寫一個函數,它將在指定的文件夾中找到一個名稱類似的文件(song.mp3,song1.mp3,(1)song.mp3)。我有什麼現在:Python在給定文件夾中找到類似的文件

def print_duplicates(source): 
    files_list = [] 
    new_list = [] 

    for dirpath, dirnames, filenames in os.walk(source): 
     for fname in filenames: 
      if ('\w*' + fname + '\w*') in files_list: 
       new_list.append(os.path.join(dirpath, fname)) 
      else: 
       files_list.append(fname) 

    for a in new_list: 
     print(a) 

如果文件名不是之前files_list將被添加,如果它是比將增加其路徑new_list。這樣我有'重複'文件的列表。然而,它不起作用,new_list仍然是空的。 你能改正我的錯誤嗎?我的代碼哪部分是錯的?

+0

看起來你試圖使用正則表達式,但你實際上並沒有使用正則表達式函數。 str中的str不會注意到任何正則表達式的語法。 – Sam

+0

你的意思是給出一個目錄中的三個文件 - 'song.mp3,song1.mp3,(1)song.mp3'你想要其中的一個在files_list中,其餘的在new_list中? –

+0

你可以添加一個輸入和預期輸出的例子,因爲你的問題很不清楚 –

回答

2

如果你想在你的代碼中使用正則表達式,你需要使用re模塊。

所以改變這一行,

if ('\w*' + fname + '\w*') in files_list: 

到,

if re.search(r'\w*' + fname + r'\w*', files_list): 

這是因爲完全相同,

if fname in file_list: 

\w*因爲指零點或多個字的字符。我想你想使用單詞界限。

if re.search(r'\b' + fname + r'\b', files_list): 
+0

感謝您的幫助,但是如何使用列表中的re.search? TypeError:預期的字符串或緩衝區。 – Przemek

+1

試試這個,'[re.search(r'regex',i).group()for i in lst]' –

相關問題