2014-03-25 33 views
0

这是我第一次使用堆栈溢出,所以很抱歉,如果我犯了一个错误。os.rename无法为某个目录重命名文件

当试图运行这段代码时,它会正常执行并给我正确重命名的文件。

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` 

我不知道这里有什么问题,请帮助我。

+1

对于重命名,您还必须提供完整路径,而不仅仅是文件名 – sshashank124

+0

@andi:请通知用户不正确的Windows标记,而不是仅仅编辑它。 – ChiefTwoPencils

回答

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', 'filenam2.txt')

+0

谢谢你给我的第二个解决方案,即使在我列举中也似乎工作 – user3458913

0

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

其他选项是使用os.chdir(desired_path)。有了这个,你的os.rename没问题。