Форум сайта python.su
0
Задание: функция file_search(folder, filename)
folder - список с вложенными списками многоуровневый. нулевой элемент - название папки, остальные - папки и файлы, вложенные папки аналогично в нулевом элементе название и т.д.
filename - имя файла который нужно найти
результат - путь к файлу
пример:
file_search([ '/home', ['user1'], ['user2', ['my pictures'], ['desktop', 'not this', 'and not this', ['newfolder', 'hereiam.py' ] ] ], 'work.ovpn', 'prom.7z', ['user3', ['temp'], ], 'hey.py'], 'hereiam.py')
результат - '/home/user2/desktop/newfolder/hereiam.py'
def file_search(folder, filename): i=1 while i<len(folder): if (filename in folder[i]) or (filename == folder[i]): print folder[i] break else: file_search(folder[i], filename) i=i+1
Отредактировано phoenix312 (Фев. 17, 2015 04:59:46)
Офлайн
61
os.path
http://pythonworld.ru/moduli/modul-os-path.html
Офлайн
857
phoenix312Сверху пишешь
а как путь к нему записать?
return filename
return os.path.join(folder, file_search(folder[i], filename))
Отредактировано py.user.next (Фев. 17, 2015 10:35:30)
Офлайн
0
дело в том что модуль OS работает с реальными адресами и папками на компе, а тут просто список левых папок
Офлайн
103
def file_search(folder, filename, s = ''): i=1 while i<len(folder): if filename == folder[i]: print "%s/%s/%s" % (s, folder[0], folder[i]) break elif hasattr(folder[i], '__iter__'): file_search(folder[i], filename, s + '/' +folder[0]) i += 1
def file_search(folder, filename, s = ''): i=1 while i<len(folder): if filename == folder[i]: return "%s/%s/%s" % (s, folder[0], folder[i]) elif hasattr(folder[i], '__iter__'): a = file_search(folder[i], filename, s + '/' +folder[0]) if a: return a i += 1 print file_search([ '/home', ['user1'], ['user2', ['my pictures'], ['desktop', 'not this', 'and not this', ['newfolder', 'hereiam.py' ] ] ], 'work.ovpn', 'prom.7z', ['user3', ['temp'], ], 'hey.py'], 'not this')
Отредактировано terabayt (Фев. 17, 2015 16:52:40)
Офлайн
0
Спасибо!
А как убрать лишний слеш вначале?
Офлайн
103
phoenix312
А как убрать лишний слеш вначале?
file_search([ 'home', ['user1'], ['user2', ['my pictures'], ['desktop', 'not this', 'and not this', ['newfolder', 'hereiam.py' ] ] ], 'work.ovpn', 'prom.7z', ['user3', ['temp'], ], 'hey.py'], 'hereiam.py')
Офлайн
857
phoenix312os.path.join() работает со строками.
дело в том что модуль OS работает с реальными адресами и папками на компе
>>> import os >>> os.path.join('a', 'b') 'a/b' >>>
Отредактировано py.user.next (Фев. 17, 2015 23:35:10)
Офлайн