2015-10-22 101 views
1

我正在嘗試使腳本來重命名文件夾中的所有文件,這是我有的代碼,但它不起作用。我在該文件夾中有200個圖像,我想將filename1_更改爲filename1,以此類推所有文件。這種轉變對狗狗來說是狗狗1;或者其他什麼,文件的新名稱可以是任何東西。有人能幫我嗎? 我還是新來的python,所以我現在的代碼可能看起來像什麼都沒有。python更改文件夾中的多個文件的文件名

import os 
    directoryname="C:\\Users\\Ineke\\Documents\\Python Scripts\\images" 
    lijstmetfiles = os.listdir(directoryname) 
    for i in range(len(lijstmetfiles)): 
     os.rename(str(lijstmetfiles[i]), str("doggy"+str(i)) 
+0

如果你張貼明顯的例子這將是有益的輸入名稱和預期的輸出名稱。 – wflynny

+0

那麼你現在的代碼實際上做了什麼*?! – jonrsharpe

+1

另外:'對於範圍內的我(len(LIST))'是[* code smell *](https://en.wikipedia.org/wiki/Code_smell)或[*反模式*](https:/ /en.wikipedia.org/wiki/Anti-pattern)。它通常可以用'for i in LIST'取代。 –

回答

2

我跑你的代碼,有以下兩個主要問題:

第一個是,你是不是在你的os.rename線關閉您的支架。

你有這樣的:

os.rename(str(lijstmetfiles[i]), str("doggy"+str(i)) 

你缺少一個括號,所以應該是:

os.rename(str(lijstmetfiles[i]), str("doggy"+str(i))) 

然而,這可能是一個編輯的問題,從您的帖子在複製你的代碼。

其次,最重要的是,你沒有指定你要重命名的路徑,你只是給出兩個文件名,所以你最有可能得到一個文件未找到錯誤。

您需要利用使用您的目錄和文件名,Python的os.path.join方法如下面的代碼樣本:

os.rename(
    os.path.join(directoryname, str(lijstmetfiles[i])), 
    os.path.join(directoryname, str("doggy"+str(i))) 
    ) 

所以,現在你明確指定的完整路徑是什麼,你的重命名。

另一個要點是,你不需要爲你的文件名轉換爲「str」。例如,即使您的文件名爲5,從listdir獲取文件列表仍然會以字符串形式返回。

最後,把他們放在一起,你的代碼應該是這個樣子:

import os 
directoryname="C:\\Users\\Ineke\\Documents\\Python Scripts\\images" 
lijstmetfiles = os.listdir(directoryname) 
print(lijstmetfiles) 
for i in range(len(lijstmetfiles)): 
    os.rename(
     os.path.join(directoryname, lijstmetfiles[i]), 
     os.path.join(directoryname, "doggy"+str(i)) 
     ) 

我測試了我的結束,它應該工作。

這是關於os模塊的文檔。看看它獲得與文件系統玩的時候什麼是提供給您進一步的理解:

的Python 2:https://docs.python.org/2/library/os.html

的Python 3:https://docs.python.org/3/library/os.html

1

以下代碼將重命名該目錄中具有相似名稱但排除_的所有文件。

#UNTESTED 
import os 
directoryname="C:\\Users\\Ineke\\Documents\\Python Scripts\\images" 
lijstmetfiles = os.listdir(directoryname) 
for i in lijstmetfiles: 
    os.rename(os.path.join(directoryname, i), 
       os.path.join(directoryname, 
          i.replace('_',''))) 
相關問題