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
To use it, you just pass a path or filename into a new Path() object using forward slashes and it handles the rest: Notice two things here: You should use forward slashes with pathlib functions. The Path() object will convert forward slashes into the correct kind of slash for the current operating system.
The file path is a string that represents the location of a file. It's broken up into three major parts: Folder Path: the file folder location on the file system where subsequent folders are separated by a forward slash / (Unix) or backslash \ (Windows)
Use the Python List sort() method to sort a list in place. The sort() method sorts the string elements in alphabetical order and sorts the numeric elements from smallest to largest. Use the sort(reverse=True) to reverse the default sort order.
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With