2014-05-18 9 views
7

एक सूची में फ़ाइलों को जोड़ने के लिए कैसे में मैं निम्न फ़ाइलें हैं: slide1.xml, slide2.xml, slide3.xml ... slide13.xmlआदेश दिया os.listdir() अजगर

os.listdir(path) मुझे आदेश

द्वारा एक सूची वापस नहीं करता है

मैं इस तरह की कोशिश की है

files_list = [x for x in sorted(os.listdir(path+"/slides/")) if os.path.isfile(path+"/slides/"+x)] 

उत्पादन: ['slide1.xml', 'slide10.xml', 'slide11.xml', 'slide12.xml', 'slide13.xml', 'slide2.xml', 'slide3.xml', 'slide3_COPY.xml', 'slide4.xml', 'slide5.xml', 'slide6.xml', 'slide7.xml', 'slide8.xml', 'slide9.xml']

+0

मुझे लगता है कि यह है क्रम में, 'slide10.x ml 'slide2.xml' से पहले चला जाता है। यदि आप चाहते हैं कि 'slide2.xml' 'slide10.xml' से पहले चला जाता है तो आपको एक कस्टम सॉर्ट – Andres

उत्तर

9

क्रमबद्ध अपनी खुद की तरह समारोह

def custom_sort(x, y): 
    pass 
    #your custom sort 

files_list = [x for x in sorted(os.listdir(path+"/slides/"), cmp=custom_sort) if os.path.isfile(path+"/slides/"+x)] 

doc

उपयोग कर सकते हैं:

import re 
files = ['slide1.xml', 'slide10.xml', 'slide11.xml', 'slide12.xml', 'slide13.xml', 'slide2.xml', 'slide3.xml', 'slide3_COPY.xml', 'slide4.xml', 'slide5.xml', 'slide6.xml', 'slide7.xml', 'slide8.xml', 'slide9.xml'] 
ordered_files = sorted(files, key=lambda x: (int(re.sub('\D','',x)),x)) 

देता ['slide1.xml', 'slide2.xml', 'slide3.xml', 'slide3_COPY.xml', 'slide4.xml', 'slide5.xml', 'slide6.xml', 'slide7.xml', 'slide8.xml', 'slide9.xml', 'slide10.xml', 'slide11.xml', 'slide12.xml', 'slide13.xml']

+0

\ d को लागू करने की आवश्यकता हो सकती है यदि आपके फ़ाइल नाम में विशेष वर्ण है, उदाहरण के लिए पूर्वी अरबी अंकों। यह http://stackoverflow.com/a/6479605/2157469 देखें – Hao

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