os.rename无法重命名某个目录中的文件
这是我第一次使用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')