如何在Python中循环遍历文件并重命名

5
我有一个音乐目录,其中包含专辑文件夹以及每个级别上的单曲。我如何遍历所有这些文件,这些文件还编码成不同的格式(mp3、wav等)? 此外,是否有一种方法可以使用正则表达式将它们重命名为更符合我的喜好的格式?谢谢。

我通常会收费来编写类似的东西。这里有一个我用Perl写的类似项目,你至少可以看到大致的想法:https://github.com/eberle1080/oggsync - Chris Eberle
@Chris:哎呀,要用300行Perl来遍历和重命名文件吗? - Eli Bendersky
不,300行代码用于将一种格式转码为另一种格式。这不是OP想要的吗? - Chris Eberle
@Chris:我认为你应该读一下问题 :) - Eli Bendersky
是的,糟糕。我的错。我错误地理解了那个。 - Chris Eberle
2个回答

7
  • 使用os.walk遍历目录及其子目录中的文件,实现递归操作。
  • 使用os.rename重命名文件。

这里文件的编码并不重要。当然,你可以检测它们的扩展名(使用os.path.splitext),并根据此进行一些操作,但只要你需要重命名文件(即操作文件名),文件内容就几乎不重要了。


1

我在自己编写的程序中使用了这段代码,用来获取一个递归的图片文件列表,调用模式类似于re.compile(r'\.(bmp|jpg|png)$', re.IGNORECASE)。相信你已经明白我的意思了。

def getFiles(dirname, suffixPattern=None):
        dirname=os.path.normpath(dirname)

        retDirs, retFiles=[], []
        for root, dirs, files in os.walk(dirname):
                for i in dirs:
                        retDirs.append(os.path.join(root, i))
                for i in files:
                        if suffixPattern is None or \
                           suffixPattern.search(i) is not None:
                                retFiles.append((root, i))

        return (retDirs, retFiles)

当你有了列表之后,应用重命名规则就很容易了。os.rename是你的好朋友,详见http://docs.python.org/library/os.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接