2015-04-19 28 views
5

Giriş dosyası, dosya yollarının listesini içerir.Dosya yolları hiyerarşik sıralama python

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 

aşağıda gibi kodlama çalıştı

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 

Girdi

aşağıda Beklenen çıkış gibi hiyerarşi sıralama çıkışını yapmak algoritma önermek, sonuç

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, 

Akım çıkışı beklendiği gibi gelmiyor

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

daha iyi uygulamak için çalışıyoruz tür aynı açıklayabilir yapmak için bir algoritma ile bana yardım edin? Beklenen çıktınız net bir kural göstermiyor. – jwilner

cevap

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

Teşekkürler Amit ... Harika düşünme .. işe yarıyor! :) – user1228191