如何在filenam中以前导零递增数字

2024-04-24 11:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

./rename.sh 5

最终文件名中的数字应该填充到长度7,并且可以保证最初没有编号为9999999的文件。所以结果文件应该是0000006 - x.jpg0000007.jpg0000008.jpg。它保证所有的文件最初都是增量的;也就是说,数字中没有空白。在

在Bash中,我似乎一点也不容易做到这一点,而且即使在Python中,这似乎也有点烦人。最好的办法是什么?在

编辑:好的,这里是我目前为止的努力。我认为前导的0是个问题,所以我使用rename删除了它们:

^{pr2}$

现在只剩下数字了,我最好使用一个循环,类似这样,但我不太熟悉语法,也不知道为什么会出错:

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

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


Tags: 文件脚本bash语言参数文件名数字编号
1条回答
网友
1楼 · 发布于 2024-04-24 11:39:19
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)

相关问题 更多 >