Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找命令输出的自定义排序_Python_Bash - Fatal编程技术网

Python 查找命令输出的自定义排序

Python 查找命令输出的自定义排序,python,bash,Python,Bash,我正在尝试使用unix“find”命令获取已排序的目录/文件列表 我想把它分类如下: ./inc/calls/show/system \ ./inc/calls/show/cli \ ./inc/calls/show/network \ ./inc/calls/show/stats \ ./inc/calls/services/ntp \ ./inc/calls/services/tsa \ ./inc/calls/services/webgui \ ./inc/calls/servic

我正在尝试使用unix“find”命令获取已排序的目录/文件列表

我想把它分类如下:

./inc/calls/show/system \    
./inc/calls/show/cli \
./inc/calls/show/network \
./inc/calls/show/stats \
./inc/calls/services/ntp \
./inc/calls/services/tsa \
./inc/calls/services/webgui \
./inc/calls/services/engine \
./inc/calls/change/password \
./inc/calls/change/network \
./inc/calls/disk/encr \
./inc/calls/system \
./inc/calls/change \
./inc/calls/services \
./inc/calls/disk \
./inc/calls/show \
./inc/calls \
./data/disks \
./inc/etc \
./bin \
./data \
./inc

哪个节点(目录/文件)有更多的子节点(目录/文件)应该是第一个。。。我想用bash或python来实现它。。。最好的方法是什么?

匹配包含
/
的行,并使用
/
作为分隔符将字段数前置到该行,对字段数进行排序并删除计数

$ awk -F/ '/\//{print NF,$0}' file | sort -nrk1 | cut -d' ' -f2-
./inc/calls/show/system
./inc/calls/show/stats
./inc/calls/show/network
./inc/calls/show/cli
./inc/calls/services/webgui
./inc/calls/services/tsa
./inc/calls/services/ntp
./inc/calls/services/engine
./inc/calls/disk/encr
./inc/calls/change/password
./inc/calls/change/network
./inc/calls/system
./inc/calls/show
./inc/calls/services
./inc/calls/disk
./inc/calls/change
./inc/etc
./inc/calls
./data/disks
./inc
./data
./bin

我将使用python并尝试转换:

a/b
a/c
b/e/f
b/e/g
例如:

{'a': {'b': {}, 'c': {}},
'b': {'e': {'f': {}, 'g': {}}},
} 
为实现这一目标:

def add_list_to_dict(lst,d):
   key, lst = lst[0], lst[1:]
   if not key in d:
       d[key] = {}
   if lst:
       add_list_to_dict(lst,d[key])

d = {}
for path in paths:
    add_list_to_dict(path.split('/'),d)
OP说:“哪个节点(目录/文件)有更多的子节点(目录/文件)应该是第一个…”。您首先列出了最深的路径。如果在“inc/calls/services”中添加了文件,则应首先列出该文件,但不会与您的解决方案一起列出。
def add_list_to_dict(lst,d):
   key, lst = lst[0], lst[1:]
   if not key in d:
       d[key] = {}
   if lst:
       add_list_to_dict(lst,d[key])

d = {}
for path in paths:
    add_list_to_dict(path.split('/'),d)