2013-04-10 117 views
0
import os 
folder = 'C:/Python27/Data' 
for the_file in os.listdir(folder): 
    file_path = os.path.join(folder, the_file) 
    try: 
     if os.path.isfile(file_path): 
      os.unlink(file_path) 
    except Exception, e: 
     print e 

這是我用來從目錄中刪除文本文件的代碼,但是我想刪除特定文件,並根據某些關鍵字對它們進行過濾。 如果文本文件不包含單詞「dollar」,則將其從文件夾中刪除。這應該爲目錄內的所有文件完成。刪除特定文本文件

+1

只是爲了確保:你的意思是,*文件*包含單詞,而不是* *文件名?另外,看起來你的代碼會比文本文件更多地刪除... – 2013-04-10 12:59:36

+0

@TimPietzcker是的,如果它不包含'單詞',單詞可能像這樣的'dollar056'或'dollar12112ab'等,如果它有沒有像這樣的詞,比它應該刪除文本文件 – Rocket 2013-04-10 13:02:39

回答

2

如果文件比較小,那麼下面這個簡單的解決辦法是充分的:

if os.path.isfile(file_path): # or some other condition 
    delete = True    # Standard action: delete 
    try: 
     with open(file_path) as infile: 
      if "dollar" in infile.read(): # don't delete if "dollar" is found 
       delete = False 
    except IOError: 
     print("Could not access file {}".format(file_path)) 
    if delete: 
     os.unlink(file_path) 

如果文件非常大,你不想完全加載它們到內存中(特別是如果你希望在該文件中早期出現的搜索文本),用以下內容替換上述with塊:

 with open(file_path) as infile: 
      for line in file: 
       if "dollar" in line: 
        delete = False 
        break 
+0

你可以通過不使用'os.path.isfile()'來過濾文件來改進這個解決方案,但是例如使用一組已知的擴展名,如'.txt','.md'等。 – whatyouhide 2013-04-10 13:10:58

+0

@whatyouhide:當然(這就是爲什麼我評論這個問題)。也許有問題的目錄只包含文本文件... – 2013-04-10 13:12:18

相關問題