6

Input file contains list of file paths. suggest algorithm to do hierarchy sort output like below

Input

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

Expected output

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

tried coding like below, result is not coming as expected

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,

Current output

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

please help me with an algorithm to do the same

1
  • Can you better explain the sort you're trying to apply? Your expected output does not show a clear rule. Commented Apr 19, 2015 at 16:17

1 Answer 1

8
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]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.