首页 > 解决方案 > 如何在文件名中插入零以使它们的长度相同

问题描述

我想让一大批JPG文件都具有相同长度的文件名。然后将它们转换为PDF。前任。65-1A、66-10B、72-108C _> 65-001A、66-010B、72-108C。XX-XXXX 是目标长度,如果文件名称较短,则在破折号后插入正确数量的 0 以达到目标长度。

我尝试解析文件名,但我想先使文件名长度相同

def parseFilename(file):
    baseFileName = os.path.splitext(file)[0]
    parts = baseFileName.split('-')
    year = parts[0]
    sequence = 0
    permitNumber = 0
    pageNumber = 0

    if len(parts) > 1:

        if len(parts[1]) == 2:
            permitNumber = (parts[1])[0:1]
            pageNumber = (parts[1])[1:2]

        if len(parts[1]) == 3:
            permitNumber = (parts[1])[0:2]
            pageNumber = (parts[1])[2:3]

        if len(parts[1]) == 4:
            permitNumber = (parts[1])[0:2]
            pageNumber = (parts[1])[2:3]
            sequence = (parts[1])[3:4]

    permitNumber = '{0}_{1}'.format(year, permitNumber)
    return (permitNumber, pageNumber)

由于文件名的长度不同,因此无法正确解析它们。我相信让它们都具有相同的命名格式可能会更容易。

标签: pythonfilerename

解决方案


str.format()的填充可以在这里提供帮助。例如,

>>> '{:0>4}'.format('1A')
'001A'

格式:0>4说:

  • :: 表示这是一个格式说明符
  • 0: 用零填充
  • >: 右对齐
  • 4: 最多填充四个字符

我们可以改变其中的几个来填充不同的字符和不同的宽度:

>>> '{:#>6}'.format('1A')
'####1A'

这是一个执行填充的示例函数。作为奖励,它可以处理缺失或额外的连字符字段。

def PadName(orig):
  # Split into fields.
  parts = orig.split('-')
  # Make sure there are enough fields.
  while len(parts) < 2:
    # This added field will become all zeros.
    parts.append('')
  # Pad the first two fields appropriately; leave the rest alone.
  parts[0] = '{:0>2}'.format(parts[0])
  parts[1] = '{:0>4}'.format(parts[1])
  # Join the fields back together.
  return '-'.join(parts)


testNames = (
  '72-108C',  # Already formatted
  '5-1A74',  # First part short
  '65-1A',  # Second part short
  '2-10C',  # Both parts short
  '5A1-1A74',  # First part long
  '5A-1A74C',  # Second part long
  '15-4-AA',  # Extra field
  'B',  # Only one field
  '',  # Empty
)


for baseFileName in testNames:
  padded = PadName(baseFileName)
  print('{:10}  >  {:10}'.format(baseFileName, padded))

输出:

72-108C     >  72-108C   
5-1A74      >  05-1A74   
65-1A       >  65-001A   
2-10C       >  02-010C   
5A1-1A74    >  5A1-1A74  
5A-1A74C    >  5A-1A74C  
15-4-AA     >  15-0004-AA
B           >  0B-0000   
            >  00-0000  

推荐阅读