字符串中的数字自增

3 投票
5 回答
5795 浏览
提问于 2025-04-15 22:24

我正在尝试在满足某个条件之前,得到以下的输出。

test_1.jpg
test_2.jpg
..
test_50.jpg

我现在的解决办法(如果能叫解决办法的话)是


fileCount = 0
while (os.path.exists(dstPath)):
   fileCount += 1
   parts = os.path.splitext(dstPath)
   dstPath = "%s_%d%s" % (parts[0], fileCount, parts[1])

不过……这产生了以下的输出。

test_1.jpg
test_1_2.jpg
test_1_2_3.jpg
.....etc

问题是:我该如何在当前位置更改数字(而不是把数字加到最后)?

附:我正在用这个来做一个文件重命名工具。


更新:通过下面的各种想法,我发现了一个有效的循环。


dstPathfmt = "%s_%d%s"
parts = os.path.splitext(dstPath)
fileCount = 0
while (os.path.exists(dstPath)):
   fileCount += 1
   dstPath = parts[0]+"_%d"%fileCount+parts[1]

5 个回答

0

看起来你的条件 os.path.exists(dstPath) 在检查同一个重命名的文件时,可能会多次匹配到。举个例子,它先把 test.jpg 重命名为 test_1.jpg;然后再把 test_1.jpg 重命名为 test_1_2.jpg,依此类推。

1

最简单的方法可能是把dstPath设置成类似“test_%d.jpg”的格式,然后只需要传入一个变化的数字就可以了:

dstPath = "test_%d.jpg"
i = 1
while os.path.exists(dstPath % i):
    i += 1
dstPath = dstPath % i # Final name
1

每次你在循环中转一圈的时候,打印出parts[0]的值……我想你可能会感到惊讶。

撰写回答