Python 将文件重命名为具有正确数字的增量值
我想根据根名称作为目录名来重命名图片列表(本例中为图片),方法是根据文件总数和增量,用适当的零填充之前的编号。我正在考虑使用Powershell或Python。推荐 当前的“C:\picture”目录内容Python 将文件重命名为具有正确数字的增量值,python,windows,powershell,rename,Python,Windows,Powershell,Rename,我想根据根名称作为目录名来重命名图片列表(本例中为图片),方法是根据文件总数和增量,用适当的零填充之前的编号。我正在考虑使用Powershell或Python。推荐 当前的“C:\picture”目录内容 pic 1.jpg ... pic 101.jpg 结果 picture 001.jpg ... picture 101.jpg 以下是python解决方案: import glob import os dirpath = r'c:\picture' dirname = os.path.
pic 1.jpg
...
pic 101.jpg
结果
picture 001.jpg
...
picture 101.jpg
以下是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))
)
$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
使用文件计数pad
计算:len(文件路径列表)
类似于'picture{:>0{}}.jpg'。格式(99,3)
。格式化字符串'picture{:>03}.jpg'。格式(99)
zero pad({:>03}
),右对齐(0
)输入值(
,在下面的示例中)99
- 您已经知道如何遍历目录
- 访问脚本中的文件名
- 重命名文件 有几件事需要了解
- 如果文件名小于某个大小,则文件名的格式为数字加上“0”,在您的示例中,如果文件名小于3,则文件名的格式为数字加上“0”
,提供了一个详细的格式字符串说明符来实现这一点str.format
- 您需要知道如何根据需要重新格式化文件名的相关部分
- 格式最终会根据文件的数量而变化李>
演示
>>> 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
以下是PowerShell解决方案: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)) )
$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
参数以实际执行重命名。我建议您使用python或powershell。如果你有一些代码,我可能也能帮你。也许值得解释一下-WhatIf
是如何工作的。'picture{:>0{}}.jpg'.format(n,pad)
- 假设