2011-06-04 11 views
5

के साथ फाइलों की कालक्रम सूची कैसे बनाएं, मैं उन फ़ाइलों की एक सूची बनाना चाहता हूं, जिनमें एक्सटेंशन है .bas, और जिन्हें 1 जून, 2011 के बाद संशोधित किया गया था। इसके अलावा, मैं ' डी को यह जानना है कि सूची में फ़ाइलों को वैकल्पिक रूप से कैसे दिनांकित किया गया था, दिनांक और समय के साथ फ़ाइल को अंतिम बार संशोधित किया गया था, उदाहरण के लिए, 'filename.bas 2011-06-04_AM.00.30'फ़ाइल संशोधन दिनांक

मैं एक अजगर नौसिखिया हूं। मैं .bas विस्तार दिनांक के अनुसार वर्गीकृत होने फ़ाइलों की सूची के लिए, निम्न कोड का उपयोग करके कर रहा था:

from stat import S_ISREG, ST_CTIME, ST_MODE 
import os, sys, time, glob 
search_dir = r"e:\test" 
files = filter(os.path.isfile, glob.glob(search_dir + "\\*.bas")) 
files.sort(key=lambda x: os.path.getmtime(x)) 

लेकिन मैं समझ नहीं सूची में फ़ाइल नाम के "तिथि" संलग्न करने का तरीका।

किसी भी सुझाव की बहुत सराहना की जाएगी।

+0

'key = lambda x: os.path.getmtime (x)' -> 'key = os.path.getmtime' –

उत्तर

4

टुपल्स की सूची में फ़ाइलों और तिथियों को एकत्रित करें और तिथि तत्व द्वारा उस सूची को सॉर्ट करें। यहाँ उदाहरण कोड है, यह टिप्पणी यह ​​समझने के लिए पर्याप्त होना चाहिए:

from stat import S_ISREG, ST_CTIME, ST_MODE 
import os, sys, time, glob 
search_dir = r"e:\test" 
files = filter(os.path.isfile, glob.glob(search_dir + "\\*.bas")) 
file_date_tuple_list = [] 
for x in files: 
    d = os.path.getmtime(x) 
    #tuple with file and date, add it in a list 
    file_date_tuple = (x,d) 
    file_date_tuple_list.append(file_date_tuple) 
#sort the tuple list by the second element which is the date 
file_date_tuple_list.sort(key=lambda x: x[1]) 

वैकल्पिक रूप से, आप एक सूची समझ का उपयोग कर सकते कोड अधिक कॉम्पैक्ट और स्वच्छ बनाने के लिए ...

file_date_tuple_list = [(x,os.path.getmtime(x)) for x in files] 
file_date_tuple_list.sort(key=lambda x: x[1]) 

यह दो पंक्तियां पहले उदाहरण से सभी for पाश को प्रतिस्थापित कर देगी।

अब अगर क्या आप सूची में चाहते हैं फ़ाइल नाम और फिर स्वरूपित तारीख ... जोड़ने के इस आयात के साथ एक स्ट्रिंग ...

from datetime import date 

और इस सूची समझ के साथ एक और लाइन है कि संशोधन समय स्टाम्प लेता है और इसे एक स्ट्रिंग में स्वरूपित करता है।

file_date_string_list = ["%s %s"%(x[0],date.fromtimestamp(x[1])) \ 
              for x in file_date_tuple_list] 

sort निष्पादन में वैकल्पिक पैरामीटर reverse का उपयोग प्रकार के आदेश को पलटने के लिए:

file_date_tuple_list.sort(key=lambda x: x[1],reverse=True) 

एक विशिष्ट datetime

from datetime import datetime 
limit = datetime(2011,01,05,17,0,0) #5pm , Jun 5 2011 
file_date_string_list = ["%s %s"%(x[0],date.fromtimestamp(x[1])) \ 
             for x in file_date_tuple_list \ 
             if datetime.fromtimestamp(x[1]) > limit ] 

करने की तारीख को सीमित करने के लिए आप देख सकते हैं आप सूची समझ के अंदर if स्थिति जोड़ सकते हैं, जो वास्तव में अच्छा है।

+0

धन्यवाद। वह इतना अविश्वसनीय रूप से सहायक था। क्या मुझे यह दिखाने के लिए परेशान होना बहुत परेशान होगा कि इसे कैसे संशोधित किया जाए ताकि सबसे हालिया फाइलें पहले हों, और इसलिए केवल 1 जून को 5 बजे के बाद फाइलें file_date_string_list में होंगी? फिर से धन्यवाद। – user235218

+1

निश्चित रूप से, उस प्रश्न का अंतिम भाग देखें जहां मैंने जोड़ा है जिसके लिए आपको इसकी आवश्यकता हो सकती है। अगर मेरा जवाब सहायक था तो कृपया इसे वोट दें और इसे स्वीकार करें;) –

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