使用Python递归重命名文件

时间:2014-01-06 12:49:35

标签: python recursion renaming

我有一个大型目录结构,每个目录包含多个子目录,多个.mbox文件或两者。我需要将所有.mbox文件重命名为相应的文件名而不使用扩展名,例如   bar.mbox - >酒吧   foo.mbox - > FOO

这是我写的脚本:

# !/usr/bin/python
import os, sys

def walktree(top, callback):
    for path, dirs, files in os.walk(top):
        for filename in files:
            fullPath = os.path.join(path, filename)
            callback(fullPath)

def renameFile(file):
    if file.endswith('.mbox'):
        fileName, fileExt = os.path.splitext(file)
        print file, "->", fileName
        os.rename(file,fileName)

if __name__ == '__main__':
    walktree(sys.argv[1], renameFile)

当我使用以下方式运行时:

python walktrough.py "directory"

我收到错误:

Traceback (most recent call last):
  File "./walkthrough.py", line 18, in <module>
    walktree(sys.argv[1], renameFile)
  File "./walkthrough.py", line 9, in walktree
    callback(fullPath)
  File "./walkthrough.py", line 15, in renameFile
    os.rename(file,fileName)
OSError: [Errno 21] Is a directory

1 个答案:

答案 0 :(得分:0)

这是通过添加额外的条件语句来测试的,以测试文件的名称是否要更改为当前目录。

如果这是真的,那么将要添加下划线的文件名。

感谢WKPlus对此的暗示。

BCvery1