簡體   English   中英

部分目錄列表

[英]partial directory listing

是否可以獲得部分目錄列表?

在Python中,我有一個進程試圖獲取包含> 100,000個文件的目錄的os.listdir ,這需要永遠。 我希望能夠快速獲得前1,000個文件的列表。

我怎樣才能做到這一點?

我找到了一個解決方案,給我一個隨機的文件順序:)(至少我看不到一個模式)

首先我在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要快多少,我使用以下小shellcript創建了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倍的加速,這非常好:)。

我希望這是你想要實現的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM