使用python重命名文件名

时间:2011-08-23 07:01:13

标签: python renaming

我只需要在特定目录中的所有文件的末尾添加“_Manual”一词 这是我目前正在使用的脚本 - 我没有使用python的经验,所以这个脚本是我躺在其他脚本的frankenstine!

它不会给出任何错误消息,但它也不起作用..

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)

但它仍然无法正常工作.. 它没有打印任何内容,文件夹中没有任何变化!

4 个答案:

答案 0 :(得分: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.txt重命名为dir1/something_manual.txt

答案 1 :(得分: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的完整路径。

答案 2 :(得分:3)

予。即它什么都没做?我们来看看:

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变成制表符。

答案 3 :(得分: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”