2011-07-19 14 views
5

मैं ऐसे प्रोग्राम के साथ काम कर रहा हूं जो किसी सीएसवी फ़ाइल को आउटपुट लिखता है, जिस क्रम में फ़ाइलों को निर्देशिका से पढ़ा जाता है। हालांकि अंत में 1,2,3,4,5,6,7,8,9,10,11,12 के साथ बड़ी संख्या में फाइलें हैं। मेरा प्रोग्राम वास्तव में फाइलों को पढ़ता है, मुझे लगता है कि वर्णमाला क्रम: 1,10,11,12 ...., 2,20,21 ..... 99। समस्या यह है कि एक और कार्यक्रम मानता है कि आदेश संख्यात्मक क्रम में है, और ग्राफ परिणामों को skews।पढ़ने से पहले निर्देशिका में फ़ाइलों को कैसे सॉर्ट करें?

वास्तव में फ़ाइल की तरह दिखता है: String.ext.ext2.1.txt, String.ext.ext2.2.txt, और इतने पर ...

मैं इस एक अजगर स्क्रिप्ट के साथ कर सकते हैं?

उत्तर

12
files = ['String.ext.ext2.1.txt', 'String.ext.ext2.12.txt', 'String.ext.ext2.2.txt'] 
# files: coming from os.listdir() sorted alphabetically, thus not numerically 

sorted_files = sorted(files, key=lambda x: int(x.split('.')[3])) 
# returns: ['String.ext.ext2.1.txt', 'String.ext.ext2.2.txt', 'String.ext.ext2.12.txt'] 
+0

क्या आप समझा सकते हैं कि दूसरी पंक्ति कैसे काम करती है? – Jim

+2

'sorted_files = sorted (फ़ाइलें, key = lambda x: int (x.split ('।') [3])) 'क्रमबद्ध' फ़ंक्शंस दूसरे तर्क द्वारा दिए गए चयनकर्ता का उपयोग करके इसका पहला तर्क टाइप करता है। किसी निश्चित कॉलम द्वारा तालिका को सॉर्ट करने के बारे में सोचें। अब, दूसरे तर्क के लिए। यह आपके फ़ाइल नाम को भागों की एक सूची में बदल रहा है ('.' से अलग) और उस सूची में तीसरा तत्व लेना –

+1

इसे इसके साथ काम करने के लिए मिला: sorted_files = sorted (file_list, key = lambda x: int (x। विभाजन ('।') [3]) अगर (x.endswith ("txt")) अन्य x) – Jim

5

प्रोग्राम में फ़ाइलों की अपनी सूची सॉर्ट करें। फ़ाइलों को सही क्रम में देने के लिए ऑपरेटिंग सिस्टम कॉल पर भरोसा न करें, यह वास्तविक फ़ाइल सिस्टम पर निर्भर करता है।

1

आप कुछ इस तरह का उपयोग कर सकते हैं:

fileNames = ['String.ext.ext2.2.txt', 'String.ext.ext2.20.txt', 'String.ext.ext2.1.txt', 'String.ext.ext2.10.txt', 'String.ext.ext2.11.txt', 'String.ext.ext2.0.txt',] 
fileNames = sorted(fileNames, key=lambda y: int(y.rsplit('.', 2)[1])) 
4
  1. उपयोग os.listdir फ़ाइल नामों की सूची प्राप्त करने के लिए।
  2. natural sort order का उपयोग करके सूची को सॉर्ट करें।
  3. अपनी क्रमबद्ध सूची के क्रम में फ़ाइलों को संसाधित करें।
संबंधित मुद्दे

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