2011-08-23 202 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