使用Python重命名文件名
我需要在特定文件夹里的所有文件名后面加上“_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"),而你用分割的方法把它分成了 something
和 txt
。但是,当你只指定 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
被转换成制表符。