2007-07-20

 

Python Cookbook 2.17 替换目录树下文件的扩展名

需求:

你需要对一个目录树的文件进行重命名操作,用给定的扩展名替换它们的扩展名.

讨论:

对一个目录树下的所有文件进行操作,使用Python标准库的os.walk是比较方便的:

import os
def swapextensions(dir, before, after):
    if before[:1] != '.':
        before = '.'+before
    thelen = -len(before)
    if after[:1] != '.':
        after = '.'+after
    for path, subdirs, files in os.walk(dir):
        for oldfile in files:
            if oldfile[thelen:] == before:
                oldfile = os.path.join(path, oldfile)
                newfile = oldfile[:thelen] + after
                os.rename(oldfile, newfile)
if _ _name_ _=='_ _main_ _':
    import sys
    if len(sys.argv) != 4:
        print "Usage: swapext rootdir before after"
        sys.exit(100)
    swapextensions(sys.argv[1], sys.argv[2], sys.argv[3])

上面的代码说明了如何替换指定目录树下所有文件的扩展名,用于需要批量更新文件名的地方很合适,比如网站.也可以用于更改用批处理下载的文件名称的错误.
上面的代码也被设计成模块,以便别的程序使用,或者通过命令行,它是与平台无关的.你可以传递给它传递带.或者不带.的参数,因为在代码中进行了处理.(当然,这也带来一个负面效果,它不能处理不带任何扩展名的文件,尤其是在类Unix系统下)
上面的代码中使用的默写技术可能让理想主义者认为底层.它直接操作了文件名,而不是使用os.path下面的方法.其实并没有关系,因为Python提供的字符串处理功能也是很方便的.

相关说明:
rename(...)
    rename(old, new)

    Rename a file or directory.

join(a, *p)
    Join two or more pathname components, inserting "\" as needed



Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?