python - 寻找最低未使用号码的优雅和简短(pythonic)方式

标签 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

欢迎更好的建议。

编辑:查找不会并行运行,而且我需要最低的未使用索引(并行查找并不总是给出最低的索引)。还假设我不能列出所有已使用的名称,只能测试一个是否存在(我不仅想将它用于文件,而且还想将其用于一般的命名对象,并且列表并不总是可能或有效)。

最佳答案

相同数量的语句,但可能稍微更具可读性。使用itertools.count :

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

关于python - 寻找最低未使用号码的优雅和简短(pythonic)方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548198/

相关文章:

python - Python中的长导入

python - 如何编写一个满足typing.TextIO 的类文件?

Python:追加列表实际上并没有追加它?

python - 如何为泛型工厂方法创建类型提示?

python - 将字符串列表 [ '3' , '1' , '2' ] 转换为排序整数列表 [1, 2, 3]

python - 如何将带有多个字符的定界符的 .text 解析为 pandas df?

python - 使用 Pandas 将 dfs 列表从 pd.read_html 转换为 dfs

python - 如何匹配日期时间[ns]和日期时间[D]

python - `asyncio.new_event_loop` 有哪些用例?

python - 模拟上的相同调用链是否总是返回完全相同的模拟对象?