2014-03-25 34 views
0

這是我第一次使用堆棧溢出,所以很抱歉,如果我犯了一個錯誤。os.rename無法爲某個目錄重命名文件

當試圖運行這段代碼時,它會正常執行並給我正確重命名的文件。

import os 
a = 0 
name_target = raw_input("input the prefix of the files you want enumerated") 
for filename in os.listdir("."): 
    if filename.startswith(name_target): 
     a = int(a) + 1 
     a = str(a) 
     no = filename.__len__() - 4 
     os.rename(filename, filename[:no] + a + '.txt') 

現在,只要腳本存在於與文件相同的文件夾中,就可以了。但我希望能夠將這個腳本與不在同一個文件夾中的文件一起使用。

我發現os.listdir('\some\folder\elsewhere')工作正常,其他目錄,但是當它與os.rename代碼中斷給我的消息,對其進行重命名:

Traceback (most recent call last): 
    File "<string>", line 244, in run_nodebug 
    File "C:\Users\guy\Desktop\otherfolder\renaming_script.py", line 10, in <module> 
    os.rename(filename, filename[:no] + a + '.txt') 
WindowsError: [Error 2] The system cannot find the file specified` 

我不知道這裏有什麼問題,請幫助我。

+1

對於重命名,您還必須提供完整路徑,而不僅僅是文件名 – sshashank124

+0

@andi:請通知用戶不正確的Windows標記,而不是僅僅編輯它。 – ChiefTwoPencils

回答

1

問題是,對於其他目錄,您正在正確地獲取目錄內容,但是當您嘗試使用文件名簡單重命名內容時,程序實際上會查找它自己的目錄,並且無法找到該文件,拋出一個錯誤。相反,你應該做的事情如下:

os.rename('\some\folder\elsewhere\filename.txt', '\some\folder\elsewhere\filename2.txt')

或者,你也可以做到以下幾點:

directory = '\some\folder\elsewhere' 
os.rename(os.path.join(directory, 'filename.txt'), os.path.join(directory, 'filename2.txt')) 

或者,你也可以改變你的工作目錄如下:

os.chdir('\some\folder\elsewhere') 

然後簡單地調用os.rename方法,就好像你在想要的目錄 os.rename('filename.txt', 'filenam2.txt')

+0

謝謝你給我的第二個解決方案,即使在我列舉中也似乎工作 – user3458913

0

如果使用os.listdir(path),則還必須在重命名中提供路徑:os.rename(path+filename,path+new_name)

其他選項是使用os.chdir(desired_path)。有了這個,你的os.rename沒問題。