Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—尝试确定文件夹列表中未使用的最小数量_Python_Loops - Fatal编程技术网

Python—尝试确定文件夹列表中未使用的最小数量

Python—尝试确定文件夹列表中未使用的最小数量,python,loops,Python,Loops,我的办公室已列出文件夹01200001、01200002等。我正在尝试从列表中返回未使用的最低值 以下是我目前的脚本: import os def Exst(yr, i): exst = [n for n in os.listdir("P:/20" + str(yr)) if '01' + str(yr) + str(i) in n][0] print(exst) for i in range(0001, 9999): try: Exst(20, i.

我的办公室已列出文件夹01200001、01200002等。我正在尝试从列表中返回未使用的最低值

以下是我目前的脚本:

import os

def Exst(yr, i):
    exst = [n for n in os.listdir("P:/20" + str(yr)) if '01' + str(yr) + str(i) in n][0]
    print(exst)

for i in range(0001, 9999):
    try:
        Exst(20, i.zfill(4))
    except:
        print("01" + str(yr) + str(i).zfill(4))
        break
我得到的是最初的01200001值,但循环似乎直到失败才递增。在except语句中,我试图读取try循环停止工作的值


我对Python非常陌生,请原谅我的无知。

您希望搜索现有文件夹,并返回第一个不存在的文件夹。所以说你有

folders = os.listdir(...)
您可以执行如下非常简单的实现:

for i in range(1, 10000):
    if f'01{yr}{i:04d}' not in folders:
        return i
这将格式化每个索引
i
的文件夹名称,并返回不在
文件夹中的第一个索引。格式化索引时,请确保使用format spec
04d
,以便始终得到一个四个字符的字符串,其中包含零而不是空格填充

但这种方法效率低下:它对每个索引执行线性搜索。更好的方法可能是对目录内容进行排序,找到第一个匹配项的索引,然后逐步查找差距:

def find_min_index(yr):
    folders = os.listdir(...)
    folders.sort()
    try:
        start = folders.index(f'01{yr}0001')
    except ValueError:
        return 1
    expected = 2
    for expected, actual in enumerate(folders[start + 1:], start=2):
        if f'01{yr}{expected:04d}' != actual
            break
    return expected

这可能意味着执行
break
语句,从而在第一次迭代时中断循环。如果不是你想要的,考虑删除它。在初学者中这是一个非常常见的主题:打印不能代替返回值。小心使用数字文字,如<代码> 0001 < /代码>…任何带前导零的文字都被视为“八进制”(即基数8),例如
0010==8
。在这种情况下,
0001==1
那么您仍然可以