Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 20, 2015 00:30:51

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

функция которая возвращает путь к элементу в структуре списка

Помогите разработать алгоритм работы такой программы, возможно надо использовать рекурсию

разработать функцию 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)

Офлайн

#2 Сен. 20, 2015 01:44:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

функция которая возвращает путь к элементу в структуре списка

И если в вашей первой структуре встретилось имя файла то что с ним надо делать? Как на вывод повлияет ‘prometheus.7z’?
И что означают все эти имена папок? Искать файл надо в любой из них?
Откуда взялась такая постановка задачи? Очень похоже что не алгоритм надо выдумывать а подумать как постановку задачи упростить.
А так listdir,glob вам помогут.



Отредактировано doza_and (Сен. 20, 2015 01:45:50)

Офлайн

#3 Сен. 20, 2015 02:02:48

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

функция которая возвращает путь к элементу в структуре списка

ну это дословное условие задачи, выводятся только названия папок, а вложенные файлы игнорируются

Офлайн

#4 Сен. 20, 2015 04:32:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

функция которая возвращает путь к элементу в структуре списка

>>> 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version