qtreewig中的目录树

2024-06-16 09:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用zipfiletarfilePython模块来打开、提取和压缩归档文件。
我需要在QTreeWidget中显示归档结构,但我不知道如何继续。为了获得信息,我使用了来自this file的函数infos(path)。 我想(从方舟)得到这样的东西:
alt text

{I>想要获得这个文件名:^例如

- prova.py
- GCI/
    |
    |- prova2.py
    |- PyFiles/
             |- prova3.py
    |- Screenshots/

在我的QTreeWidget中。在

谢谢你, 魔方


Tags: 模块path函数py信息文件名this结构
1条回答
网友
1楼 · 发布于 2024-06-16 09:16:16

我不确定QTreeWidget如何希望它的数据是现成的,但是这里有一个(可能是不好的方法)在内存中构建结构。在

x = ('GCI/PyFiles/prova3.py', 'GCI/', \
     'GCI/PyFiles/', 'GCI/Screenshots/', \
     'GCI/prova2.py', 'prova.py')

structure = {}
for fn in x:
    path = fn.split('/')

    tmpd = structure
    for p in path[:-1]:
        try:
            tmpd = tmpd[p]
        except KeyError:
            tmpd = tmpd[p] = {}

    tmpd[path[-1]] = None

这将为您提供一个字典structure,对于每个键,它要么是另一个字典(表示文件夹),要么是表示密钥是文件的None。在

更好的方法是创建这样的类:

^{pr2}$

或者类似你可以填充的东西。如果我记得在我的QT编程时代,QTreeWidget需要一个数据源,这样你就可以基本上弄清楚这个源是什么样子的,并适当地填充它。也可能有这样做的选择

[sp for _,sp in sorted(
         (len(splitpath),splitpath) for splitpath in
            (path.split('/') for path in x)
         )
    ]

这将返回给您:

[['prova.py'], ['GCI', ''], ['GCI', 'prova2.py'], 
 ['GCI', 'PyFiles', ''], ['GCI', 'PyFiles', 'prova3.py'], 
 ['GCI', 'Screenshots', '']]

相关问题 更多 >