在python中递归重命名文件

时间:2019-11-15 05:08:39

标签: python python-3.x operating-system

我有一个名为“ 12”的文件夹,该文件夹包含以下文件:

import os
for root, dirs, files in os.walk('./12', topdown=True):
    dirs.clear() #with topdown true, this will prevent walk from going into subs
    for file in files:
        print(file)

输出:

ab  1.jpg
ab 0.jpg

现在我想用下划线替换上面文件中的空格,以完成我已经完成的操作:

import os
for root, dirs, files in os.walk('./12', topdown=True):
    dirs.clear() #with topdown true, this will prevent walk from going into subs
    for file in files:
        r=file.replace(" ", "_")
        os.rename(r, file)

在上面的代码中,当我print(r)时,它为我提供了下划线代替的空间值

ab__1.jpg
ab_0.jpg

但是os.rename函数不起作用,并且文件夹内的实际文件名没有更改。 os.rename(r,file)出现以下错误:

  

回溯(最近一次通话最后一次):文件“ demo.py”,第7行,在          os.rename(r,file)FileNotFoundError:[错误2]没有这样的文件或目录:'ab__1.jpg'->'ab 1.jpg'

如何解决此错误?

修改: 我的问题不是Rename multiple files in a directory in Python的重复,因为在提到的链接上,它们使用一个for循环递归重命名当前工作目录中的所有文件。在我的问题中,我使用2个for循环,因为重命名文件是整个过程的一部分,当我使用2个for循环时,遇到了错误。

3 个答案:

答案 0 :(得分:2)

也许您打算做os.rename("./12/" + file, ./12/" + r)?在修改名为12的目录中的文件时,而不是在其中执行Python脚本的目录中进行修改。

答案 1 :(得分:0)

使用os.rename(file, r)代替os.rename(r, file)

答案 2 :(得分:0)

糟糕,我必须提供重命名这些文件的绝对路径:

import os
cwd=os.getcwd()+'/12'
print(cwd)


for root, dirs, files in os.walk('./12', topdown=True):
    dirs.clear() #with topdown true, this will prevent walk from going into subs
    for file in files:
        r=file.replace(" ", "_")

        os.rename(os.path.join(cwd,file), os.path.join(cwd,r))