我会先对列表进行排序 - 然后它们至少按照您想要的顺序排列。这被推断为基于 num '/' 使用 vars 缩进以及使用 '/' 上的拆分索引。
老实说,这个问题引起了我的兴趣,所以这里的版本应该适用于您作为列表提供的任何 dir 结构,即使某些子文件夹没有列出。
def make_fldr(arr):
print("-- Processing Pass 1 --")
processed = []
path_repr = ''
sub_dir = '| '
for path in arr:
dirs = path[0].split("/")
num_slash = path[0].count('/')
sep = '/'
for i in range(num_slash):
rep = sep.join(dirs[:i+1])
if [rep+'/'] not in arr:
arr.append([rep+'/'])
[processed.append(x) for x in arr if x not in processed]
print("-- Building structure: Pass 2 --")
processed.sort()
print("Processed List is sorted")
for path in processed:
num_slash = path[0].count('/')
if num_slash == 1:
piece = path[0].split("/")
if piece[1] == '':
path_repr += f'|--{piece[0]}\n'
else:
path_repr += f'{sub_dir}|--{piece[1]}\n'
else:
if path[0].split("/")[-1] == '':
path_repr += f'{sub_dir * (num_slash-1)}|--{path[0].split("/")[-2]}\n'
else:
path_repr += f'{sub_dir * num_slash}|--{path[0].split("/")[-1]}\n'
return path_repr
structure = make_fldr(data)
print(structure)
给定一个扩展集
data = [
['19.2.000/'],
['19.2.000/resa/'],
['19.2.000/resa/resa19application.zip'],
['19.2.000/rms/'],
['19.2.000/rms/BdiEdgeAppJobAdminPak19.1.000ForRms19.1.000_eng_ga.zip'],
['19.2.001/'],
['19.2/'],
['19.2/rpm/'],
['19.2/rpm/release_details'],
['19.2/rpm/rpm19application.zip'],
['RESA/'],
['RESA/folder1/'],
['RESA/folder1/release_details'],
['RESA/folder1/resainstaller.zip'],
['RESA/release_details'],
['RESA/resainstaller.zip'],
['RMS/'],
['RMS/release_details'],
['RMS/rmsinstaller.zip'],
['RPM/'],
['RPM/release_details'],
['RPM/rpminstaller.zip']
]
上面的函数产生
Processed List is sorted
|--19.2.000
| |--resa
| | |--resa19application.zip
| |--rms
| | |--BdiEdgeAppJobAdminPak19.1.000ForRms19.1.000_eng_ga.zip
|--19.2.001
|--19.2
| |--rpm
| | |--release_details
| | |--rpm19application.zip
|--RESA
| |--folder1
| | |--release_details
| | |--resainstaller.zip
| |--release_details
| |--resainstaller.zip
|--RMS
| |--release_details
| |--rmsinstaller.zip
|--RPM
| |--release_details
| |--rpminstaller.zip
我使用您共享的完整文件进行了测试 - 它似乎工作正常。早期版本不起作用的原因是我假设所有子目录都以'/'结尾,但有些没有。一旦我用完整的集合进行了测试,我就可以找出错误发生的位置。