2011-08-23 133 views
1

我需要簡單地將單詞「_Manual」添加到我在特定目錄中所有文件的末尾 以下是我目前使用的腳本 - 我沒有python的使用經驗,所以這腳本是我躺在其他腳本的frankenstine!使用python重命名文件名

它不給任何錯誤消息,但它也不起作用..

folder = "C:\Documents and Settings\DuffA\Bureaublad\test" 

import os, glob 

for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1]) 
     filename_zero = filename_split[0] 
     os.rename(filename_zero, filename_zero + "_manual") 

我現在用

folder = "C:\Documents and Settings\DuffA\Bureaublad\test" 
import os # glob is unnecessary 
for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root, filename) 
     filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1]) 
     filename_zero, fileext = filename_split 
     print fullpath, filename_zero + "_manual" + fileext 
     os.rename(fullpath, filename_zero + "_manual" + fileext) 

,但它仍然不工作.. 它不打印任何東西,和文件夾中沒有任何變化!

回答

3

I.e。它什麼都沒做?讓我們看看:

folder = "C:\Documents and Settings\DuffA\Bureaublad\test" 

import os # glob is unnecessary 

for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root, filename) 
     filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1]) 
     filename_zero, fileext = filename_split 
     os.rename(fullpath, filename_zero + "_manual" + fileext) 

可能會訣竅,因爲您必須使用完整路徑。但我不明白爲什麼有當文件找不到也不例外......


編輯把變化更加突出的位置:

你也似乎有你路徑錯誤。

使用

folder = r"C:\Documents and Settings\DuffA\Bureaublad\test" 

,以防止該\t變成一個製表符。

+1

再次,與這一個我沒有得到一個錯誤,但目錄中沒有改變! –

+0

奇怪......你可以在'os.rename()'之前放一個'print fullpath,filename_zero +「_manual」+ fileext'來看看會發生什麼...... – glglgl

+0

什麼都沒有發生.. –

4
folder = r"C:\Documents and Settings\DuffA\Bureaublad\test" 

import os, glob 

for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1]) 
     filename_zero = filename_split[0] 
     os.rename(os.path.join(root, filename), os.path.join(root, filename_zero + "_manual" + filename_split[1])) 

在你的代碼,您試圖重命名filename_zero,這是沒有擴展名的文件名,因此不存在,作爲一個真正的路徑。您必須指定與上面類似的os.rename的完整路徑。

+0

我得到一個無效的語法錯誤最後一行? –

+0

是的,有一個關閉的人失蹤。更正它。 – Jacob

+0

oop - 修正了那裏,有一個失蹤的「)」..但它仍然只是默默地失敗? –

5

os.rename需要源文件名和目標文件名。變量filename包含您當前的文件名(例如「something.txt」),而您的分割將其分隔爲somethingtxt。作爲要重命名的源文件,您只能指定something,這會自動失敗。

取而代之,您要重命名filename中給出的文件,但是當您也走入子文件夾時,您需要確保使用絕對路徑。爲此,您可以使用os.path.join(root, filename)

所以最後你得到的東西是這樣的:

os.rename(os.path.join(root, filename), 
    os.path.join(root, filename_zero + "_manual" + filename_split[1])) 

這將重命名爲dir1/something.txtdir1/something_manual.txt

0
for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     os.rename(os.path.join(root,filename), 
        os.path.join(root,'%s_manual%s' % os.path.splitext(filename))) 

,你應該在你的代碼添加控件,以驗證重命名的文件名有沒有在其字符串名稱「_manual」

+0

它肯定沒有 - 我做了一些隨機名稱的測試文件! –

+0

@Alice Duff我很想寫你的代碼有一個轉折......現在我寫在那裏是在你的代碼中的一個轉折,因爲我剛剛看到_glglgl_找到了轉折點:你必須轉義您的文件夾的名稱。你當然在Windows上。所以我的代碼肯定有效。 – eyquem