Форум сайта python.su
0
Помогите разработать алгоритм работы такой программы, возможно надо использовать рекурсию
разработать функцию 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'
Отредактировано 0x420 (Сен. 20, 2015 00:32:00)
Офлайн
253
И если в вашей первой структуре встретилось имя файла то что с ним надо делать? Как на вывод повлияет ‘prometheus.7z’?
И что означают все эти имена папок? Искать файл надо в любой из них?
Откуда взялась такая постановка задачи? Очень похоже что не алгоритм надо выдумывать а подумать как постановку задачи упростить.
А так listdir,glob вам помогут.
Отредактировано doza_and (Сен. 20, 2015 01:45:50)
Офлайн
0
ну это дословное условие задачи, выводятся только названия папок, а вложенные файлы игнорируются
Офлайн
857
>>> 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' >>>
Отредактировано py.user.next (Сен. 20, 2015 04:39:48)
Офлайн