使用Python重命名文件名

1 投票
4 回答
10562 浏览
提问于 2025-04-17 00:10

我需要在特定文件夹里的所有文件名后面加上“_Manual”这个词。现在我用的这个脚本是我从其他地方拼凑过来的,因为我对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)

但它还是不管用……它什么都不打印,文件夹里的文件也没有任何变化!

4 个回答

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 提供完整的路径。

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

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 被转换成制表符。

撰写回答