मैं एक समाधान है कि मुझे फ़ाइलें :) (कम से कम मैं एक पैटर्न नहीं देख सकते हैं) के एक यादृच्छिक क्रम
सबसे पहले मैं this post in the python maillist पाया देता पाया। 3 फाइलें संलग्न हैं जिन्हें आपको अपनी डिस्क (opendir.pyx, setup.py, test.py
) पर प्रतिलिपि बनाना है। इसके बाद आपको पोस्ट से opendir.pyx
फ़ाइल संकलित करने के लिए पाइथन पैकेज Pyrex की आवश्यकता है। मुझे Pyrex इंस्टॉल करने में समस्याएं थीं और पाया कि मुझे python-dev
apt-get
के माध्यम से स्थापित करना था। इसके बाद मैंने python setup.py install
के साथ तीन उपरोक्त डाउनलोड की गई फ़ाइलों से opendir
पैकेज स्थापित किया। फ़ाइल test.py
में उदाहरण हैं कि इसका उपयोग कैसे करें।
अगला मुझे दिलचस्पी थी कि यह समाधान os.listdir का उपयोग करने से कितना तेज़ होगा और मैंने निम्नलिखित छोटी शेलस्क्रिप्ट के साथ 200000 फाइलें बनाई हैं।
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]
आप मुझे देख सकते हैं
for((i=0; i<200000; i++))
do
touch $i
done
निम्न स्क्रिप्ट मेरे बेंचमार्क निर्देशिका में चल रहा है, जहां मैं सिर्फ फ़ाइलें बनाई है 200000 के बाहर 100 फाइलनामों के साथ एक सूची लौटने पर 200 के एक कारक की गति मिली, यह बहुत अच्छा है :)।
मुझे आशा है कि यह वह लक्ष्य है जिसे आप प्राप्त करने का प्रयास कर रहे हैं।
यह उपयोग में हो सकता है: http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with-ls/ – Kev
साफ! मुझे यह नहीं पता था। –
क्या ऑर्डर महत्वपूर्ण है? –