Найти - Пользователи
Полная версия: функция которая возвращает путь к элементу в структуре списка
Начало » Python для новичков » функция которая возвращает путь к элементу в структуре списка
1
0x420
Помогите разработать алгоритм работы такой программы, возможно надо использовать рекурсию

разработать функцию file_search(folder, filename),
которая принимает 2 аргумента – список folder и строчку filename,
и возвращает строчку – полный путь к файлу или папки filename в структуре folder.

Файловая структура folder задается следующим образом:

Список – это папка с файлами, его 0-й элемент вмещает название папки, а все остальные могут представлять или файлы в этой папке (1 файл = 1 строчка-элемент списка), или вложенные папки, которые так же представляются списками. Как и в файловой системе вашего компьютера, путь к файлу состоит из имен всех папок, в которых он находится, в порядке вложения (начиная с внешней и до папки, в которой непосредственно находиться файл), разделенных “/”.

Считать, что имена всех файлов уникальные. Вернуть логическое значение False, если файл не найден.

Например:
Вызов функции:
 file_search([ '/home', ['user1'], ['user2', ['my pictures'],
 ['desktop', 'not this', 'and not this', ['new folder', 'hereiam.py' ] ] ],
 'work.ovpn', 'prometheus.7z', ['user3', ['temp'], ], 'hey.py'], 'hereiam.py')
возвращает:
 '/home/user2/desktop/new folder/hereiam.py'
doza_and
И если в вашей первой структуре встретилось имя файла то что с ним надо делать? Как на вывод повлияет ‘prometheus.7z’?
И что означают все эти имена папок? Искать файл надо в любой из них?
Откуда взялась такая постановка задачи? Очень похоже что не алгоритм надо выдумывать а подумать как постановку задачи упростить.
А так listdir,glob вам помогут.
0x420
ну это дословное условие задачи, выводятся только названия папок, а вложенные файлы игнорируются
py.user.next
>>> def file_search(tree, fname):
...     isfirst = True
...     for i in tree:
...         if isfirst:
...             isfirst = False
...         elif isinstance(i, list):
...             subpath = file_search(i, fname)
...             if subpath:
...                 return '/'.join((tree[0], subpath))
...         elif i == fname:
...             return '/'.join((tree[0], fname))
...     return False
... 
>>> file_search(
... ['/home',
...   ['user1'],
...   ['user2',
...     ['my pictures'],
...     ['desktop',
...       'not this',
...       'and not this',
...       ['new folder',
...         'hereiam.py'
...       ]
...     ]
...   ],
...   'work.ovpn',
...   'prometheus.7z',
...   ['user3',
...     ['temp']
...   ],
...   'hey.py'
... ],
... 'hereiam.py'
... )
'/home/user2/desktop/new folder/hereiam.py'
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB