2013-01-06 41 views
1

我發現了幾個相關的帖子,但是當我嘗試使用代碼時,我一直在提示「系統找不到指定的文件」。我想這是一種路徑問題。 「Cust」文件夾中有幾個文件夾,每個文件夾都有幾個文件,其中一些文件夾的文件名爲「。」。在我需要刪除的文件名中。任何想法我在這裏錯了嗎?使用Python從幾個文件名中刪除一段時間

customer_folders_path = r"C:\Users\All\Documents\Cust" 
for directname, directnames, files in os.walk(customer_folders_path): 
    for file in files: 
     filename_split = os.path.splitext(file) 
     filename_zero = filename_split[0]    
     if "." in filename_zero: 
      os.rename(filename_zero, filename_zero.replace(".", "")) 

回答

2

當您使用os.walk然後通過文件迭代,記住,你只能通過文件名進行迭代 - 不完整路徑(這是由os.rename才能正常工作需要)。此外

os.rename(os.path.join(directname, filename_zero), 
      os.path.join(directname, filename_zero.replace(".", ""))) 

,不知道你是否在其他地方使用,但你可以刪除:您可以通過添加的完整路徑,文件本身,而你的情況將通過加入directnamefilename_zero表示使用os.path.join一起調整你的filename_split變量,並將filename_zero定義爲filename_zero = os.path.splitext(file)[0],這將做同樣的事情。您可能還想將customer_folders_path = r"C:\Users\All\Documents\Cust"更改爲customer_folders_path = "C:/Users/All/Documents/Cust",因爲該目錄將被Python正確解釋。

編輯:正如@bozdoz智能地指出的那樣,當您拆分後綴時,會丟失原始文件,因此無法找到它。下面是應該在你的情況下工作的例子:

import os 

customer_folders_path = "C:/Users/All/Documents/Cust" 
for directname, directnames, files in os.walk(customer_folders_path): 
    for f in files: 
     # Split the file into the filename and the extension, saving 
     # as separate variables 
     filename, ext = os.path.splitext(f) 
     if "." in filename: 
      # If a '.' is in the name, rename, appending the suffix 
      # to the new file 
      new_name = filename.replace(".", "") 
      os.rename(
       os.path.join(directname, f), 
       os.path.join(directname, new_name + ext)) 
+0

謝謝你的答案。所以我更新了你的建議,我仍然得到相同的確切的錯誤。我已經檢查了好幾次,以確保我所有的語法都正確無誤。我必須有其他的錯誤。 – wilbev

+0

@wilbev我會嘗試在觸發條件時做一個簡單的'os.path.join(directname,filename_zero)'結果打印 - 基本上,我們要確認它正在重命名的文件確實存在:) – RocketDonkey

+0

@wilbev啊,我剛剛注意到你的初始目錄名 - 嘗試刪除'r'並將反斜槓改爲正斜線(這將被Python正確轉換爲反斜槓)。目錄本身可能導致問題在這裏。 – RocketDonkey

1

您需要使用原始文件名作爲第一個參數來os.rename和處理的情況下的文件名沒有擺在首位一段。如何:

customer_folders_path = r"C:\Users\All\Documents\Cust" 
for directname, directnames, files in os.walk(customer_folders_path): 
    for fn in files: 
     if '.' in fn: 
      fullname = os.path.join(directname, fn) 
      os.rename(fullname, os.path.splitext(fullname)[0]) 
相關問題