Python 如何在文件名中以前导零递增数字

Python 如何在文件名中以前导零递增数字,python,bash,batch-rename,Python,Bash,Batch Rename,我有一组文件,扩展名不一定相同。这些文件是由一个Python脚本创建的,该脚本对一些文件(比如x.jpg、y.jpg和z.jpg)进行迭代,然后用零填充对它们进行编号,使数字长度为7个字符(在本例中,文件名变为0000001-x.jpg,0000002-y.jpg,以及0000003-z.jpg) 我现在需要一个脚本(任何语言都可以,但最好是Bash/zsh),它将通过一个参数增加这些数字。从而重命名目录中的所有文件。例如,我想将程序调用为(假设使用Shell脚本): 最终文件名中的数字应填充为

我有一组文件,扩展名不一定相同。这些文件是由一个Python脚本创建的,该脚本对一些文件(比如x.jpg、y.jpg和z.jpg)进行迭代,然后用零填充对它们进行编号,使数字长度为7个字符(在本例中,文件名变为
0000001-x.jpg
0000002-y.jpg
,以及
0000003-z.jpg

我现在需要一个脚本(任何语言都可以,但最好是Bash/zsh),它将通过一个参数增加这些数字。从而重命名目录中的所有文件。例如,我想将程序调用为(假设使用Shell脚本):

最终文件名中的数字应填充为长度7,并保证最初没有编号为9999999的文件。因此,生成的文件应该是
0000006-x.jpg
0000007.jpg
0000008.jpg
。保证所有文件最初都是增量文件;也就是说,数字上没有差距

在Bash中,我似乎一点也不容易做到这一点,即使在Python中,这也似乎是一件琐事。最好的方法是什么

编辑:好的,这是我迄今为止所做的努力。我认为最前面的0是个问题,所以我使用重命名删除了它们:

rename 's/^0*//' *
现在只剩下数字了,我最好使用一个循环,类似这样的循环,但我不太熟悉语法,也不太清楚为什么这样做是错误的:

for file in "(*) - (*)" ; do mv "${file}" "$(($1+5)) - ${2}" ; done

这里的5是硬编码的,但是我想把它改成第一个参数应该不会有什么大不了的。然后,我可以使用另一个循环将0添加回。

欢迎使用SO。Stack Overflow是一个面向专业和热心程序员的问答网站。目标是在你的问题中添加一些你自己的代码,以显示至少你自己为解决这个问题所做的研究工作。因此,你从文件1开始,向其中添加5,并将其另存为文件6,因此当你到达文件6时,它实际上包含文件1。请注意操作顺序。例如,如果有五个文件的编号从1到5,并且偏移量为3,那么如果从最小的编号(1)开始,则将通过重命名文件4和5来覆盖它们,并以尾部的副本结束。从尾部开始,向后操作。@MarkSetchell是的,这只是一个批量重命名操作,文件名中的数字递增。我的问题是想让你看到一个问题。。。您可能需要反向运行循环,即倒计时。
import sys, glob, re, os
# Get the offset at the first command-line argument
offset = int(sys.argv[1]) 

# Go through the list of files in the reverse order
for name in reversed(glob.glob('*.jpg')):
    # Extract the number and the rest of the name
    i, rest = re.findall("^(\d+)(.+)", name)[0]
    # Construct the new file name
    new_name = "{:07d}{}".format(int(i) + offset, rest)
    # Rename
    os.rename(name, new_name)
import sys, glob, re, os
# Get the offset at the first command-line argument
offset = int(sys.argv[1]) 

# Go through the list of files in the reverse order
for name in reversed(glob.glob('*.jpg')):
    # Extract the number and the rest of the name
    i, rest = re.findall("^(\d+)(.+)", name)[0]
    # Construct the new file name
    new_name = "{:07d}{}".format(int(i) + offset, rest)
    # Rename
    os.rename(name, new_name)