python - 如何使用 os.listdir 按第一个目录排序,然后在 python 中使用文件?

标签 python

我使用os.listdir(),这段代码可以遍历系统目录结构,然后生成一个json文件给easyui的django前端调用display tree UI:

def CreateDirTree(path,file_json):
    global id_num
    id_num=0
    def createDict(path):
            global id_num
            tree_list=[]
            pathList = os.listdir(path)
            for i,item in enumerate(pathList):
                    id_num+=1
                    children_map={}
                    children_map['id']=id_num
                    children_map['text']=item
                    if os.path.isdir(os.path.join(path,item)):
                            path = os.path.join(path,item)
                            print "directory:",path
                            tmp_listdir=os.listdir(path)
                            if  len(tmp_listdir) != 0:
                                    children_map['state']='closed'
                                    children_map['children'] = createDict(path)
                            tree_list.append(children_map)
                            path = '\\'.join(path.split('\\')[:-1])
                    else:
                        tree_list.append(children_map)
                        print children_map
            return tree_list

    tree_list=createDict(path)
    fjson = json.dumps(tree_list,ensure_ascii=False,sort_keys=False)
    with open(file_json,'w') as lf:
            lf.write(fjson)
    ##end
CreateDirTree("D:\\all_source\\somesite","123.json")

运行结果为:

directory: D:\all_source\somesite\a

file is: b.txt

file is: oo.txt

file is: a.txt

directory: D:\all_source\somesite\b

file is: 123.txt

file is: b.txt
directory: D:\all_source\somesite\c

file is: yyt.txt

directory: D:\all_source\somesite\c\z

file is: c.txt

file is: e.txt

但是我要的效果是:

directory: D:\all_source\somesite\a

a subdir files: 123.txt

a subdir files: abc.txt

directory: D:\all_source\somesite\b

directory: D:\all_source\somesite\c

directory: D:\all_source\somesite\c\z

file is: a.txt

file is: b.txt

file is: c.txt

file is: e.txt

先按目录排序再按文件排序,怎么办?请帮助我,谢谢!

最佳答案

为目录创建一个列表,为文件创建另一个列表,并迭代它们的连接。根据您的代码进行调整:

(...)
# List of directories only
dirlist = [x for x in os.listdir(path) if os.path.isdir(os.path.join(path, x))]
# List of files only
filelist = [x for x in os.listdir(path) if not os.path.isdir(os.path.join(path, x))]
for i,item in enumerate(dir_list + filelist):
(...)

这将从目录及其子目录开始,然后移动到文件

关于python - 如何使用 os.listdir 按第一个目录排序,然后在 python 中使用文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922801/

相关文章:

python - 通过BeautifulSoup、Python从url中提取纯文本,但仍然不干净

python - 在 MacOS 上使用 PyInstaller 加载 Python 库时出错

python - Graphene-Django 和模型属性

python - Pyinstaller 在 python 3.7 中不起作用(找不到模块 'encodings')

python - Apache2.2:ImportError: 没有名为 site 的模块

python - 给定字典列表,如何消除一个键的重复项,并按另一个键排序

Python 和 Pandas : Re-indexing after selecing entries

python - 在不同模块之间共享 models.py 文件的方法?

python - 使用 matplotlib 平滑 imshow 图

python - 在 python 列表中交换元素的时间复杂度