使用正确的数字将文件重命名为增量值

时间:2013-10-08 03:18:36

标签: python windows powershell rename

我想基于作为目录名称的根名称(本例中的图片)重命名图片列表,方法是根据文件总数和增量用适当的零填充前一个编号。我在考虑使用Powershell或Python。建议?

当前' C:\ picture'目录内容

pic 1.jpg
...
pic 101.jpg

结果

picture 001.jpg
...
picture 101.jpg

3 个答案:

答案 0 :(得分:1)

这里的python解决方案:

import glob
import os

dirpath = r'c:\picture'
dirname = os.path.basename(dirpath)

filepath_list = glob.glob(os.path.join(dirpath, 'pic *.jpg'))
pad = len(str(len(filepath_list)))
for n, filepath in enumerate(filepath_list, 1):
    os.rename(
        filepath,
        os.path.join(dirpath, 'picture {:>0{}}.jpg'.format(n, pad))
    )
  • pad使用文件计数len(filepath_list)计算:

    >>> len(str(100)) # if file count is 100
    3
    
  • 'picture {:>0{}}.jpg'.format(99, 3)'picture {:>03}.jpg'.format(99)类似。格式化字符串{:>03}零填充(0),右对齐(>)输入值(以下示例中为99)。

    >>> 'picture {:>0{}}.jpg'.format(99, 3)
    'picture 099.jpg'
    >>> 'picture {:>03}.jpg'.format(99)
    'picture 099.jpg'
    

所用功能的文档:

答案 1 :(得分:0)

假设

  1. 您已经知道如何遍历目录
  2. 访问脚本中的文件名
  3. 重命名文件
  4. 要了解的事情

    1. 如果文件名小于特定大小,则文件名的格式为“0”,如果小于3,则为例。str.format提供精心设计的格式字符串说明符
    2. 您需要知道如何根据需要重新格式化文件名的相关部分
    3. 格式最终会根据文件数量而有所不同。
    4. <强>演示

      >>> no_of_files = 100
      >>> no_of_digits = int(math.log10(no_of_files)) + 1
      >>> format_exp = "pictures {{:>0{}}}.{{}}".format(no_of_digits)
      >>> for fname in files:
          #Discard the irrelevant portion
          fname = fname.rsplit()[-1]
          print format_exp.format(*fname.split('.'))
      
      
      pictures 001.jpg
      pictures 002.jpg
      pictures 010.jpg
      pictures 100.jpg
      

答案 2 :(得分:0)

这是一个PowerShell解决方案:

$jpgs = Get-ChildItem C:\Picture\*.jpg
$numDigits = "$($jpgs.Length)".Length
$formatStr = "{0:$('0' * $numDigits)}"
$jpgs | Where {$_.BaseName -match '(\d+)'} | 
        Rename-Item -NewName {$_.DirectoryName + '\' + $_.Directory.Name + ($formatStr -f [int]$matches[1]) + $_.Extension} -WhatIf

如果-WhatIf预览看起来不错,请删除-WhatIf参数以实际执行重命名。