2015-04-19 6 views
5

इनपुट फ़ाइल में फ़ाइल पथ की सूची शामिल है। एल्गोरिथ्म का सुझावफ़ाइल पथ पदानुक्रम में पाइथन

नीचे

इनपुट

A/file1 
A/B/C/D/file3 
A/B/file1 
A/B/file2 
A/B/C/D/file1 
A/file2 
A/W/X/Y/Z/file1 
A/W/file1 
A/W/X/file1 
A/file3 
A/B/C/file1 
A/W/X/Y/file1 
A/B/file2 

अपेक्षित उत्पादन

A/file1 
A/file2 
A/file3 

A/B/file1 
A/B/file2 

A/B/C/file1 

A/B/C/D/file1 
A/B/C/D/file3 


A/W/file1 

A/W/X/file1 

A/W/X/Y/file1 

A/W/X/Y/Z/file1 

नीचे की तरह कोडिंग की कोशिश की तरह पदानुक्रम तरह उत्पादन करना है, परिणाम नहीं हो रही है के रूप में उम्मीद

import sys,os 
d1,d2 = '','' 
l1 = [ x for x in open(sys.argv[1])] 
s2 = sorted(l1,key = lambda x : len(x.split('/'))) 
for linE in s2: 
    f1 = linE.strip('\n') 
    d1 = os.path.dirname(f1) 
    if d1 != d2 : print 
    d2 = d1 
    print linE, 

वर्तमान उत्पादन

A/file1 
A/file2 
A/file3 

A/B/file1 
A/B/file2 

A/W/file1 

A/B/file2 

A/W/X/file1 

A/B/C/file1 

A/B/C/D/file3 
A/B/C/D/file1 

A/W/X/Y/file1 

A/W/X/Y/Z/file1 

कृपया मुझे एक ही

+0

आप बेहतर तरह आप लागू करने के लिए कोशिश कर रहे हैं की व्याख्या कर सकते करने के लिए एक एल्गोरिथ्म के साथ मदद? आपका अपेक्षित आउटपुट स्पष्ट नियम नहीं दिखाता है। – jwilner

उत्तर

5
str = """A/file1 
A/B/C/D/file3 
A/B/file1 
A/B/file2 
A/B/C/D/file1 
A/file2 
A/W/X/Y/Z/file1 
A/W/file1 
A/W/X/file1 
A/file3 
A/B/C/file1 
A/W/X/Y/file1 
A/B/file2""" 

import string 
files = string.split(str, "\n") 

import os.path 
std = sorted(files, key=lambda file: (os.path.dirname(file), os.path.basename(file))) 

print std[0] 
for i in range(1,len(std)): 
    if os.path.dirname(std[i]) != os.path.dirname(std[i-1]): 
     print "" 
    print std[i] 
+0

धन्यवाद अमित..बहुत सोच .. यह काम करता है !! :) – user1228191

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