【问题标题】:Renaming files from a folder, by changing the prefixes in the front of the filename, depening in the number of files in the folder重命名文件夹中的文件,通过更改文件名前面的前缀,取决于文件夹中的文件数量
【发布时间】:2018-09-10 01:04:43
【问题描述】:

我已经下载了一些文件,并使用数字作为前缀来命名它们(是视频):

_01_filename
_02_filename
_10_filename
_100_filename
_101_filename
....
_20_filename

正如您在上面的示例中看到的那样,100 紧接在 10 之后,而不是在 99

之后

所以,我想阅读它们并将它们重命名为 001,在这种情况下 020

实际检查文件个数,根据文件个数确定零个数(前面)

所以,我正在考虑创建一个包含要扫描的文件夹的列表:

[folder1, folder2, folder3,...]

并获取文件的总数。

不行,我要维持他们之前的秩序,而不是去搞乱秩序。按名称排序不是一个选项,因为我会在 10 后得到 100

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:
    import os
    import re
    
    filenames = os.listdir()
    
    
    def rename(old_filename,new_filename):
        old_path = os.path.join(os.getcwd(), old_filename)
        new_path = os.path.join(os.getcwd(), new_filename)
        try:
            os.rename(old_path, new_path)
            return True
        except:
            return False
    
    for file in filenames:
        #removing underscores if any in starting of name
        if file[0] == '_':
            length = len(file)
            newfilename = file[1:length]
            #finding integers in string (finidng in starting four letters only)
            digit = re.findall('\d+',newfilename[0:3])
            #formatting numbers with prefix zero
            y = digit[0]
            newdigit = '{:03}'.format(int(y))
    
            newfiletemp = newfilename.lstrip(y)
    
            newfile = newdigit + newfiletemp
    
            rename(file,newfile)
    

    Before Screenshot

    After Screenshot

    【讨论】:

    • 如果你的文件名和你提到的一样,那么这段代码必须在同一个目录下工作
    • @user3541631 如果文件名有超过 3 个数字前缀...它将重命名为三个数字...您可以通过将 newfilename[0:3] 编辑为 newfilename[0 :5] 或根据您的文件名限制
    【解决方案2】:

    您可以先计算文件列表中数字前缀的最大宽度,然后使用str.rjust'0's填充到该宽度的前缀中。

    以下示例假设您将文件名列表存储在列表 l 中:

    from os import rename
    l = ['_01_filename',
    '_02_filename',
    '_10_filename',
    '_100_filename',
    '_101_filename']
    w = max(map(lambda s: len(s.split('_')[1]), l))
    for f in l:
        p, i, n = f.split('_', 2)
        rename(f, '_'.join(((p, i.rjust(w, '0'), n))))
    

    【讨论】:

    • 我正在考虑扫描文件夹;查看更新的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2016-01-17
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 2016-08-25
    • 2015-12-03
    相关资源
    最近更新 更多