部分目录列表

是否有可能获得部分目录列表?

在Python中,我有一个尝试获取包含大于100,000个文件的目录的os.listdir的进程,并且这需要永久。 我希望能够让我们快速获得前1000个文件的列表。

我怎样才能做到这一点?


我找到了一个解决方案,给了我一个随机的文件顺序:)(至少我看不到一个模式)

首先,我在python maillist中找到了这篇文章。 有3个文件需要复制到磁盘( opendir.pyx, setup.py, test.py )。 接下来,您需要python软件包Pyrex来编译文章中的opendir.pyx文件。 我在安装Pyrex时遇到问题,发现我必须通过apt-get安装python-dev 。 接下来,我使用python setup.py install从上面下载的三个文件中安装opendir软件包。 test.py文件包含如何使用它的示例。

接下来我感兴趣的是这个解决方案比使用os.listdir快多少,并且我用下面的小shell创建了200000个文件。

for((i=0; i<200000; i++))
do
    touch $i
done

以下脚本是我刚刚创建文件的目录中运行的基准:

from opendir import opendir
from timeit import Timer
import os

def list_first_fast(i):
    d=opendir(".")
    filenames=[]
    for _ in range(i):
        name = d.read()
        if not name:
            break
        filenames.append(name)
    return filenames

def list_first_slow(i):
    return os.listdir(".")[:i]

if __name__ == '__main__':
    t1 = Timer("list_first_fast(100)", "from __main__ import list_first_fast")
    t2 = Timer("list_first_slow(100)", "from __main__ import list_first_slow")
    print "With opendir: ", t1.repeat(5, 100)
    print "With os.list: ", t2.repeat(5, 100)

我的系统上的输出是:

With opendir:  [0.045053958892822266, 0.04376697540283203, 0.0437769889831543, 0.04387712478637695, 0.04404592514038086]
With os.list:  [9.50291895866394, 9.567682027816772, 9.865844964981079, 13.486984968185425, 9.51977801322937]

正如你所看到的,当从200000中返回一个包含100个文件名的列表时,我得到了200倍的加速,这很不错:)。

我希望这是你正在努力实现的目标。

链接地址: http://www.djcxy.com/p/11149.html

上一篇: partial directory listing

下一篇: Best way to create a Android XMPP chat client in Unity3D