我想基于作为目录名称的根名称(本例中的图片)重命名图片列表,方法是根据文件总数和增量用适当的零填充前一个编号。我在考虑使用Powershell或Python。建议?
当前' C:\ picture'目录内容
pic 1.jpg
...
pic 101.jpg
结果
picture 001.jpg
...
picture 101.jpg
答案 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)
假设
要了解的事情
str.format
提供精心设计的格式字符串说明符{ LI>
<强>演示强>
>>> 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
参数以实际执行重命名。