【发布时间】:2017-03-03 00:56:43
【问题描述】:
我想在具有给定文件扩展名的目录树中查找所有文件。但是,有些文件夹非常大,因此如果需要很长时间(比如 1 秒),我想停止这个过程。我当前的代码如下所示:
import os
import time
start_time = time.time()
file_ext = '.txt'
path = 'C:/'
file_list = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(file_ext):
relDir = os.path.relpath(root, path)
relFile = os.path.join(relDir, file)
file_list.append(relFile)
if time.time() - start_time> 1:
break
if time.time() - start_time> 1:
break
这段代码的问题在于,当我到达一个非常大的子文件夹时,在该文件夹被完全遍历之前,这段代码不会中断。如果该文件夹包含许多文件,则可能需要比我想要的更长的时间。有什么方法可以确保代码的运行时间不会超过分配的时间?
编辑:请注意,虽然找到加速代码的方法(例如通过使用 os.scandir)肯定会有所帮助,但这个问题主要涉及如何杀死正在运行的进程。
【问题讨论】:
-
把它放在一个函数中并使用 return ?
-
不幸的是,这会产生相同的结果。
-
您的缩进很可能是错误的...尝试将您的问题复制粘贴回您的编辑器,看看它是否有效
-
刚刚测试了您发布的代码,它总是在 1 秒后几乎立即退出 (1.00009) ...
-
@JoranBeasley 我认为问题在于 os.walk 在完全读取目录之前不会为您提供文件列表,因此在枚举文件时检查时间没有好处。
标签: python