Os.walk () альтернативы - PullRequest
       27

Os.walk () альтернативы

0 голосов
/ 06 февраля 2019

Я пишу программу, которая должна исследовать все возможные подкаталоги данного пути сверху вниз.Моя проблема в том, что мне нужно что-то делать до вызова рекурсии и после финиша, и os.walk() не позволяет этого.Точнее, рекурсия в нужном мне поддереве каталогов:

(Примечание: это не настоящий Python-код, просто Python-подобный код для объяснения того, что мне нужно сделать)

def recursion(path):
    action1()
   for subdir in path:
       recursion(path+subdir)
   action2()

в то время как я могу сделать с os.walk() просто:

def recursion(path):
    action1()
    action2()
    for subdir in path:
        recursion(path+subdir)

Есть ли какое-нибудь решение?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Или вы можете использовать glob и split()

import glob
path='this/is/your/path'
pathElementList=path.split('/')
for x in range(len(pathElementList)):
    directoryToDoActionIn='/'.join(pathElementList[0:x])
    filesindir=glob.glob(directoryToDoActionIn+'/')
    #do action with files here
0 голосов
/ 06 февраля 2019

Вы можете использовать os.scandir вместо:

def recursion(path):
    action1()
    for entry in os.scandir(path):
        if entry.is_dir():
            recursion(os.path.join(path, entry.name))
    action2()

или, если вы используете Python 3.4 или более ранние версии, используйте более медленную os.listdir вместо:

def recursion(path):
    action1()
    for name in os.listdir(path):
        full_path = os.path.join(path, name)
        if os.path.isdir(full_path):
            recursion(full_path)
    action2()
...