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