Python 重试循环无法找到新创建的文件,即使它已存在

Python 重试循环无法找到新创建的文件,即使它已存在,python,Python,以下代码创建路径:/Users/michellegautier/ACHFiles/26207428-8f40-11e7-8d57-f354c8f15cfa/outbox/PPSACHCOMSpec/mt.ach.06302020。?u 817236324891097723,或类似文件 我们正在等待创建此文件。在最初的time.sleep(1)中,如果我将其更改为10,则如果不是os.path.isfile(filepath)语句将返回false,因为它找到了该文件,并且一切正常 但是,如果我将此

以下代码创建路径:
/Users/michellegautier/ACHFiles/26207428-8f40-11e7-8d57-f354c8f15cfa/outbox/PPSACHCOMSpec/mt.ach.06302020。?u 817236324891097723
,或类似文件

我们正在等待创建此文件。在最初的
time.sleep(1)
中,如果我将其更改为
10
,则
如果不是os.path.isfile(filepath)
语句将返回false,因为它找到了该文件,并且一切正常

但是,如果我将此时间缩短到
1
,而文件还没有出现,那么我将在创建文件后尝试查找它。即使我添加了大量暂停并确保创建了文件,for循环中的以下
if os.path.isfile(filepath):
也不会通过,我不知道为什么

我尝试将语句调整为exists,检查文件的长度等,但不管怎样,如果在第一次检查中没有找到它,即使在添加文件后,它也不会在后续检查中找到该文件。请帮忙

home = str(Path.home())
file_date = strftime('%m%d%Y')
if company_profile == 'from_storage':
    company_profile = context.storage['company_profile_id']
filepath = home + '/ACHFiles/' + context.providerID + '/outbox/PPSACHCOMSpec/mt.ach.' + file_date + '.??????_{}'.format(
            company_profile)
       
time.sleep(int(1))
for name in glob.glob(filepath):
    filepath = name

if not os.path.isfile(filepath):
for i in range(3):
    time.sleep(3)
    if os.path.isfile(filepath):
        print('File found:    ', filepath)
        break

问题在于使用
glob.glob()
。它将只返回已经存在的文件。如果启动时不存在任何匹配文件,
glob.glob()
将不会返回任何内容,
filepath
仍将设置为通配符
os.path.isfile()
不进行通配符匹配,因此它永远不会成功

您需要在重试循环中调用
glob.glob()
,而不是在循环之前

max_retries = 4
time.sleep(1)
for _ in range(max_retries):
    files = glob.glob(filepath):
    if len(files) > 0:
        filepath = files[-1]
        print("File found: " + filepath)
        break
    time.sleep(3)
else:
    print("File not found")

问题在于使用
glob.glob()
。它将只返回已经存在的文件。如果启动时不存在任何匹配文件,
glob.glob()
将不会返回任何内容,
filepath
仍将设置为通配符
os.path.isfile()
不进行通配符匹配,因此它永远不会成功

您需要在重试循环中调用
glob.glob()
,而不是在循环之前

max_retries = 4
time.sleep(1)
for _ in range(max_retries):
    files = glob.glob(filepath):
    if len(files) > 0:
        filepath = files[-1]
        print("File found: " + filepath)
        break
    time.sleep(3)
else:
    print("File not found")

你肯定把问题误诊了
filepath=name
只是在每次迭代中覆盖
filepath
,剩下的就是最后一个。我看不出你在哪里创建文件,请发帖子,以获得正确的缩进,并确保我们有一个完整的@roganjosh,谢谢你的反馈。我没有在代码中创建文件。我启动了一个这样做的进程,在这段代码中,我准备读取该文件。没有重试循环。@JanChristophTerasa
for I in range(3):
是重试循环。很确定您在这里误诊了问题
filepath=name
只是在每次迭代中覆盖
filepath
,剩下的就是最后一个。我看不出你在哪里创建文件,请发帖子,以获得正确的缩进,并确保我们有一个完整的@roganjosh,谢谢你的反馈。我没有在代码中创建文件。我已经启动了一个这样做的进程,在这段代码中,我准备读取该文件。没有重试循环。@JanChristofterasa
for I in range(3):
是重试循环。这就解决了它。非常感谢您的解释!这就解决了问题。非常感谢您的解释!