2010-12-21 13 views
9

टाइमस्टैम्प के आधार पर निर्देशिका में फ़ाइलों को कैसे सूचीबद्ध करें?समय पर आधारित निर्देशिका लिस्टिंग

os.listdir() 

मनमाने ढंग से क्रम में सूचीबद्ध करता है।

क्या टाइमस्टैम्प के आधार पर सूची में कोई बिल्ड-इन फ़ंक्शन है? या किसी भी आदेश से?

+1

शायद http://stackoverflow.com/q/168409/505893 – bluish

उत्तर

37

आप प्रत्येक फाइल पर stat() पर कॉल कर सकते हैं और टाइमस्टैम्प में से किसी एक द्वारा क्रमबद्ध कर सकते हैं, शायद एक महत्वपूर्ण फ़ंक्शन का उपयोग करके जो फ़ाइल का टाइमस्टैम्प देता है।

import os 

def sorted_ls(path): 
    mtime = lambda f: os.stat(os.path.join(path, f)).st_mtime 
    return list(sorted(os.listdir(path), key=mtime)) 

print(sorted_ls('documents')) 
+0

का डुप्लिकेट आप इसे समझा सकते हैं क्योंकि मुझे लैम्ब्डा फ़ंक्शंस का उपयोग करने के बारे में पता नहीं है? – vkris

+2

निश्चित रूप से, लैम्बडा मूल रूप से अनाम नाम हैं। वे कोलन से पहले तर्क ले सकते हैं (इस मामले में एक है: एफ, एक फ़ाइल नाम)। लैम्ब्डा का शरीर एक अभिव्यक्ति है, जिसके परिणामस्वरूप लैम्ब्डा के वापसी मूल्य के रूप में उपयोग किया जाता है। 'सॉर्टेड' फ़ंक्शन एक पुनरावर्तनीय (जैसे एक सूची) लेता है और दिए गए इटेरिएबल के सॉर्ट किए गए संस्करण का उत्पादन करने से एक इटेटरेटर देता है। 'कुंजी' कीवर्ड तर्क में एक फ़ंक्शन प्रदान करने से आप दिए गए आइटमों में आइटमों के प्राकृतिक क्रम के अलावा कुछ और सॉर्ट कर सकते हैं। 'Mtime' फ़ंक्शन प्रत्येक फ़ाइल नाम पर कॉल किया जाता है और सूची को सॉर्ट करने के लिए उपयोग किया जाता है। – HarryM

+0

यह एक अच्छा, चालाक समाधान है। – jmoz

0

मेरे तत्काल समाधान है,

>>> import commands 
>>> a = commands.getstatusoutput("ls -ltr | awk '{print $9}'") 
>>> list =a[1].split('\n') 

डुप्लिकेट पोस्ट नीले द्वारा बताया के अनुसार, यह एक बुरा हल है; यह बुरा क्यों है?

+4

यह शुद्ध पायथन में किया जा सकता है ... खोलने और सिस्टम utils (जो क्रॉस-प्लेटफॉर्म नहीं हैं) का उपयोग करने की आवश्यकता नहीं है। भी, 'आदेश' के बजाय 'subprocess' का उपयोग किया जाना चाहिए। –

संबंधित मुद्दे