优雅短(Python)的方式找到最低未使用的麻木

2024-03-28 21:00:22 发布

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

假设我正在编写名为foo.001的文件,但是001被基于实际存在的文件的最低可用索引替换。写这篇文章最优雅的方式是什么?这是我用的东西,但看起来不太好,是吗?你知道吗

base='foo'
i=0
while True:
    i+=1; name=base+'.%03d'%i
    if not os.path.exists(name): break
# use name here

最好的建议是最受欢迎的。你知道吗

编辑:查找不会并行运行,另外我需要最低的未使用索引(并行查找并不总是给出最低的索引)。另外,假设我不能列出所有已经使用的名称,只测试其中一个是否存在(我不仅希望将其用于文件,而且通常还希望将其用于命名对象,并且列出并不总是可行或有效的)。你知道吗


Tags: 文件pathnametruebaseiffooos
3条回答

这里有一个建议:

import os
path = '/home/mydir'
existingnumbers = [int(entry.split('.')[1]) for entry in os.listdir(path) if 'foo.' in entry]
potentialnumbers = range(len(existingnumbers)+1)
newfile = 'foo.{0}'.format(min(set(potentialnumbers) - set(existingnumbers)))

同样数量的陈述,但可能稍微可读。使用^{}

from itertools import count

def next_available(base):
    for ext in count(start=1):
        name = '{}.{:03d}'.format(base, ext)
        if not os.path.exists(name):
            return name
import glob

used_filenames = {name:True for name in glob.glob('foo.[0-9][0-9][0-9]'))}

for i in range(1000):
    prospect = "foo.{:03d}".format(i)
    if prospect not in used_filenames:
        print("The next unused filename is", prospect)
        break

相关问题 更多 >