Python—尝试确定文件夹列表中未使用的最小数量
我的办公室已列出文件夹01200001、01200002等。我正在尝试从列表中返回未使用的最低值 以下是我目前的脚本: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.
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 spec04d
,以便始终得到一个四个字符的字符串,其中包含零而不是空格填充
但这种方法效率低下:它对每个索引执行线性搜索。更好的方法可能是对目录内容进行排序,找到第一个匹配项的索引,然后逐步查找差距:
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
那么您仍然可以