Я не уверен, как 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', '']]