首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件重命名为具有正确数字的增量值

将文件重命名为具有正确数字的增量值
EN

Stack Overflow用户
提问于 2013-10-08 11:18:36
回答 3查看 1.3K关注 0票数 0

我想根据根名称作为目录名来重命名图片列表(本例中的图片),根据文件总数和增量,用适当的零填充前面的编号。我在考虑使用Powershell或Python。推荐?

当前的“C:\picture”目录内容

代码语言:javascript
复制
pic 1.jpg
...
pic 101.jpg

结果

代码语言:javascript
复制
picture 001.jpg
...
picture 101.jpg
EN

回答 3

Stack Overflow用户

发布于 2013-10-08 11:26:20

以下是python的解决方案:

代码语言:javascript
复制
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是使用文件数计算的,如果文件数是100,则len(filepath_list)len(str(100)) # 3
  • 'picture {:>0{}}.jpg'.format(99, 3)类似于'picture {:>03}.jpg'.format(99)。格式字符串{:>03}补零(0),右对齐(>)输入值(99 in the example).'picture {:>0{}}.jpg'.format(99,3)‘099.jpg'

099.jpg’>99 {:>03}.jpg'.format(99)’图片格式

所用函数的文档:

  • enumerate
  • glob.glob
  • os.path.basename
  • os.path.join
  • str.format
票数 1
EN

Stack Overflow用户

发布于 2013-10-08 11:37:28

假设

您已经知道如何遍历脚本中的文件名并重命名directory

  • Access

需要理解的几件事

  1. 您的文件名的格式如果小于特定大小,则用数字填充‘0’,在您的示例中,如果小于3,则填充数字。str.format提供了一个精心设计的格式字符串说明符来实现此
  2. 您需要知道如何将文件名的相关部分重新格式化为所需的格式
  3. 格式最终会根据文件的数量而有所不同。

演示

代码语言:javascript
复制
>>> 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
票数 0
EN

Stack Overflow用户

发布于 2013-10-08 12:08:04

这是一个PowerShell解决方案:

代码语言:javascript
复制
$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参数以实际执行重命名。

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

https://stackoverflow.com/questions/19238513

复制
相关文章

相似问题

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