我的 Python 等待文件出现在目录中的脚本在验证此存在的级别上迭代过多
My Python script that waits for a file to be present in a directory iterates too much at the level of the verification of this presence
我创建了一个 Python 脚本,它需要一个文件出现在一个目录中。例如,该文件是从浏览器(例如使用 Selenium)下载的。我想象的工作流程如下:
- 想象一个可以在所需目录中创建文件的操作(例如,在 Windows/Linux 的默认下载目录中使用 Selenium 下载)
- 最多10次,尝试执行此动作并等待10秒
- 每次,在这 10 秒后,检查文件是否存在于目录中:如果存在,则中断循环并继续执行脚本,因为现在它有想要的文件。如果否,继续循环直到完成 10 次(或更少)。
- 当 10 次完成后目录中仍然没有文件时,引发致命错误
我的问题
即使文件存在于目录中,循环也会执行 10 次而不是中断。
脚本(最小且可执行的示例)
来源
file_was_downloaded = False
for u in range(10):
click(Link('download the file in the directory'))
time.sleep(10)
files = os.listdir('C:/Users/XYZ/Downloads/')
for f in files:
if f.startswith("the_file.jpg") and not f.endswith(".crdownload"): # ".crdownload" if a suffix appended to the name of the file by Google Chromium/Chrome if it's not completely downloaded
file_was_downloaded = True
break
if not file_was_downloaded:
print(datetime.datetime.now() + " - The file may not be present in the directory.\n")
exit(-1)
# Below this line, we can use the file.
测试
你可以删除click
行,然后在你需要的时候在目录中添加你想要的文件来替换它,而脚本是运行。你会看到即使文件在目录中,循环也会继续迭代。这就是问题所在,我不知道为什么会这样。
预期行为
当文件在目录中被检测为“存在”时,循环中断。
实际行为
循环继续迭代。
您的 break 语句仅中断“for f in files”循环。
在“for u in range”循环中添加另一个 if:
if file_was_downloaded:
break
尝试这样的事情:
import time
for i in range(10):
'''your donwload code'''
try:
file = open("yourfile.jpg")
break
except:
time.sleep(10)
我创建了一个 Python 脚本,它需要一个文件出现在一个目录中。例如,该文件是从浏览器(例如使用 Selenium)下载的。我想象的工作流程如下:
- 想象一个可以在所需目录中创建文件的操作(例如,在 Windows/Linux 的默认下载目录中使用 Selenium 下载)
- 最多10次,尝试执行此动作并等待10秒
- 每次,在这 10 秒后,检查文件是否存在于目录中:如果存在,则中断循环并继续执行脚本,因为现在它有想要的文件。如果否,继续循环直到完成 10 次(或更少)。
- 当 10 次完成后目录中仍然没有文件时,引发致命错误
我的问题
即使文件存在于目录中,循环也会执行 10 次而不是中断。
脚本(最小且可执行的示例)
来源
file_was_downloaded = False
for u in range(10):
click(Link('download the file in the directory'))
time.sleep(10)
files = os.listdir('C:/Users/XYZ/Downloads/')
for f in files:
if f.startswith("the_file.jpg") and not f.endswith(".crdownload"): # ".crdownload" if a suffix appended to the name of the file by Google Chromium/Chrome if it's not completely downloaded
file_was_downloaded = True
break
if not file_was_downloaded:
print(datetime.datetime.now() + " - The file may not be present in the directory.\n")
exit(-1)
# Below this line, we can use the file.
测试
你可以删除click
行,然后在你需要的时候在目录中添加你想要的文件来替换它,而脚本是运行。你会看到即使文件在目录中,循环也会继续迭代。这就是问题所在,我不知道为什么会这样。
预期行为
当文件在目录中被检测为“存在”时,循环中断。
实际行为
循环继续迭代。
您的 break 语句仅中断“for f in files”循环。 在“for u in range”循环中添加另一个 if:
if file_was_downloaded:
break
尝试这样的事情:
import time
for i in range(10):
'''your donwload code'''
try:
file = open("yourfile.jpg")
break
except:
time.sleep(10)