os.rename无法重命名某个目录中的文件

0 投票
2 回答
11120 浏览
提问于 2025-04-17 23:48

这是我第一次使用Stack Overflow,如果我犯了错误请多多包涵。

当我尝试运行这段代码时,它可以正常执行,并且给我重命名好的文件。

import os
a = 0
name_target = raw_input("input the prefix of the files you want enumerated")
for filename in os.listdir("."):
    if filename.startswith(name_target):
        a = int(a) + 1
        a = str(a)
        no = filename.__len__() - 4
        os.rename(filename, filename[:no] + a + '.txt')

这没问题,只要这个脚本和文件在同一个文件夹里。但是我想要能够在不同的文件夹中使用这个脚本。

我发现使用os.listdir('\some\folder\elsewhere')可以正常列出其他目录的文件,但在用os.rename重命名时,代码就出错了,给我提示:

Traceback (most recent call last):
  File "<string>", line 244, in run_nodebug
  File "C:\Users\guy\Desktop\otherfolder\renaming_script.py", line 10, in <module>
    os.rename(filename, filename[:no] + a + '.txt')
WindowsError: [Error 2] The system cannot find the file specified`

我不知道哪里出错了,请帮帮我。

2 个回答

0

如果你使用 os.listdir(path),那么在重命名的时候也得提供路径: os.rename(path+filename,path+new_name)

另外一个选择是使用 os.chdir(desired_path)。这样的话,你的 os.rename 就可以正常使用了。

1

问题在于,对于其他文件夹,你能正确获取文件夹的内容,但当你尝试仅通过文件名来重命名这些内容时,程序实际上是在查找它自己所在的文件夹,因为找不到那个文件,所以就报错了。你应该这样做:

os.rename('\some\folder\elsewhere\filename.txt', '\some\folder\elsewhere\filename2.txt')

或者,你也可以这样做:

directory = '\some\folder\elsewhere'
os.rename(os.path.join(directory, 'filename.txt'), os.path.join(directory, 'filename2.txt'))

或者,你可以先改变你的工作目录,方法如下:

os.chdir('\some\folder\elsewhere')

然后就可以像在目标目录中一样简单地调用 os.rename 方法:

os.rename('filename.txt', 'filename2.txt')

撰写回答