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

时间:2014-03-25 09:51:13

标签: python

这是我第一次使用堆栈溢出,如果我犯了错误就很抱歉。

尝试运行此代码时,它会执行正常并给我正确重命名的文件。

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 :(得分: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(&#39; filename.txt&#39;,&#39; filenam2.txt&#39;)

答案 1 :(得分:0)

如果您使用os.listdir(path),则还必须在重命名中提供路径:os.rename(path+filename,path+new_name)

其他选项是使用os.chdir(desired_path)。这样,您的os.rename就可以了。