前言
这两天碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录。于是如何快速获取文件列表便是这两天的头等大事,折腾半天找到一个较为快速的方法,记录如下。
多种实现方法
尝试了多种方法,有编程的和非编程的。
walk
python的walk库能够递归的读取目录下所有文件,这个是最常规的方法,然而效率有些缓慢。实现很简单,不赘述。
os.scandir
python中的os.scandir方法官方解释为快速读取目录,测试了一下速度相对walk而言是由提高,但是还是达不到要求,也需要自己写递归,代码如下:
def scan_path(file_path, level = 3):
files = []
if level >= 0:
path = os.scandir(file_path)
for p in path:
if p.is_dir():
files.extend(scan_path(p.path, level - 1))
else:
files.append(p.path)
return files
当这两种方法都行不通的时候我就开始考虑才用非编程方法了。理论上来说python的执行效率已经蛮高了,虽然可能达不到c或者c++的速度,但是相比java、C#来说已经够快了,所以就没有再考虑编程的方式,而是转向linux系统原生的方式。