首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >目录中文件的批量重命名

目录中文件的批量重命名
EN

Stack Overflow用户
提问于 2008-10-22 13:33:23
回答 14查看 174.4K关注 0票数 106

有没有一种简单的方法来重命名目录中已经包含的一组文件,使用Python?

示例:我有一个满是*.doc文件的目录,我想以一致的方式重命名它们。

X.doc ->“(X).doc”

Y.doc ->“Y.doc(Y).doc”

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2008-10-22 18:59:58

这样的重命名非常简单,例如使用osglob模块:

代码语言:javascript
复制
import glob, os

def rename(dir, pattern, titlePattern):
    for pathAndFilename in glob.iglob(os.path.join(dir, pattern)):
        title, ext = os.path.splitext(os.path.basename(pathAndFilename))
        os.rename(pathAndFilename, 
                  os.path.join(dir, titlePattern % title + ext))

然后您可以在示例中使用它,如下所示:

代码语言:javascript
复制
rename(r'c:\temp\xx', r'*.doc', r'new(%s)')

上面的示例将c:\temp\xx目录中的所有*.doc文件转换为new(%s).doc,其中%s是文件以前的基本名称(不带扩展名)。

票数 117
EN

Stack Overflow用户

发布于 2011-10-27 22:53:14

我更喜欢为我必须做的每个替换编写小的一行代码,而不是编写更通用和更复杂的代码。例如:

这会将当前目录中任何非隐藏文件中的所有下划线替换为连字符

代码语言:javascript
复制
import os
[os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]
票数 136
EN

Stack Overflow用户

发布于 2008-10-22 19:30:06

如果你不介意使用正则表达式,那么这个函数将为你重命名文件提供强大的功能:

代码语言:javascript
复制
import re, glob, os

def renamer(files, pattern, replacement):
    for pathname in glob.glob(files):
        basename= os.path.basename(pathname)
        new_filename= re.sub(pattern, replacement, basename)
        if new_filename != basename:
            os.rename(
              pathname,
              os.path.join(os.path.dirname(pathname), new_filename))

因此,在您的示例中,您可以这样做(假设它是文件所在的当前目录):

代码语言:javascript
复制
renamer("*.doc", r"^(.*)\.doc$", r"new(\1).doc")

但您也可以回滚到初始文件名:

代码语言:javascript
复制
renamer("*.doc", r"^new\((.*)\)\.doc", r"\1.doc")

还有更多。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/225735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档