当前位置:  开发笔记 > 编程语言 > 正文

批量重命名目录中的文件

如何解决《批量重命名目录中的文件》经验,为你挑选了6个好方法。

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

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

X.doc - >"new(X).doc"

Y.doc - >"new(Y).doc"

Cesar Canass.. 124

我更喜欢为我必须做的每次替换编写小的一个衬里,而不是制作更通用和复杂的代码.例如:

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

import os
[os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]

比其他方法容易得多.这就是我喜欢Python的原因. (4认同)

优秀,但它只适用于没有子目录的目录. (4认同)


DzinX.. 105

这种重命名非常简单,例如使用os和glob模块:

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))

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

rename(r'c:\temp\xx', r'*.doc', r'new(%s)')

上面的示例将转换dir中的所有*.doc文件,其中是文件的先前基本名称(没有扩展名).c:\temp\xxnew(%s).doc%s



1> Cesar Canass..:

我更喜欢为我必须做的每次替换编写小的一个衬里,而不是制作更通用和复杂的代码.例如:

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

import os
[os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]


比其他方法容易得多.这就是我喜欢Python的原因.
优秀,但它只适用于没有子目录的目录.

2> DzinX..:

这种重命名非常简单,例如使用os和glob模块:

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))

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

rename(r'c:\temp\xx', r'*.doc', r'new(%s)')

上面的示例将转换dir中的所有*.doc文件,其中是文件的先前基本名称(没有扩展名).c:\temp\xxnew(%s).doc%s


@ShashankSawant它确实是一个格式化运算符.有关文档和示例用法,请参见[字符串格式化操作](https://docs.python.org/2/library/stdtypes.html#string-formatting).

3> tzot..:

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

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))

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

renamer("*.doc", r"^(.*)\.doc$", r"new(\1).doc")

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

renamer("*.doc", r"^new\((.*)\)\.doc", r"\1.doc")

和更多.



4> kiriloff..:

我有这个简单地重命名文件夹的子文件夹中的所有文件

import os

def replace(fpath, old_str, new_str):
    for path, subdirs, files in os.walk(fpath):
        for name in files:
            if(old_str.lower() in name.lower()):
                os.rename(os.path.join(path,name), os.path.join(path,
                                            name.lower().replace(old_str,new_str)))

我用new_str替换所有出现的old_str.



5> xsl..:

尝试:http://www.mattweber.org/2007/03/04/python-script-renamepy/

我喜欢以某种方式命名我的音乐,电影和图片文件.当我从互联网上下载文件时,他们通常不遵循我的命名约定.我发现自己手动重命名每个文件以适合我的风格.这很老了,所以我决定写一个程序来为我做.

此程序可以将文件名转换为全部小写,用您想要的任何内容替换文件名中的字符串,并从文件名的前面或后面修剪任意数量的字符.

该程序的源代码也可用.



6> harisibrahim..:

我自己编写了一个python脚本.它将文件所在目录的路径和您要使用的命名模式作为参数.但是,它通过将增量数字(1,2,3等)附加到您给出的命名模式来重命名.

import os
import sys

# checking whether path and filename are given.
if len(sys.argv) != 3:
    print "Usage : python rename.py  "
    sys.exit()

# splitting name and extension.
name = sys.argv[2].split('.')
if len(name) < 2:
    name.append('')
else:
    name[1] = ".%s" %name[1]

# to name starting from 1 to number_of_files.
count = 1

# creating a new folder in which the renamed files will be stored.
s = "%s/pic_folder" % sys.argv[1]
try:
    os.mkdir(s)
except OSError:
    # if pic_folder is already present, use it.
    pass

try:
    for x in os.walk(sys.argv[1]):
        for y in x[2]:
            # creating the rename pattern.
            s = "%spic_folder/%s%s%s" %(x[0], name[0], count, name[1])
            # getting the original path of the file to be renamed.
            z = os.path.join(x[0],y)
            # renaming.
            os.rename(z, s)
            # incrementing the count.
            count = count + 1
except OSError:
    pass

希望这对你有用.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有