我正在使用zipfile和tarfile Python模块来打开,提取和压缩档案。
我需要在QTreeWidget中显示存档结构,我不知道如何继续。要获取信息,请使用this file中的infos(path)
函数。
我想得到这样的东西(来自方舟):
例如,如果我收到此文件名:('GCI/PyFiles/prova3.py', 'GCI/', 'GCI/PyFiles/', 'GCI/Screenshots/', 'GCI/prova2.py', 'prova.py')
,我想获取此信息:
- prova.py
- GCI/
|
|- prova2.py
|- PyFiles/
|- prova3.py
|- Screenshots/
在我的QTreeWidget中。
谢谢你, 魔方
答案 0 :(得分:1)
我不确定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
表示该键是文件。
更好的方法是创建一个这样的类:
class Node(object):
def __init__(self):
self.dirs = {}
self.files = []
或类似的东西,你可以填充。如果我在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', '']]