Os.walk() 备选方案
Os.walk() alternatives
我正在编写一个程序,需要自上而下探索给定路径的所有可能子目录。
我的问题是我需要在调用递归之前和完成递归之后做一些事情,而 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)
有什么解决办法吗?
您可以使用 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()
或者您可以使用 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
我正在编写一个程序,需要自上而下探索给定路径的所有可能子目录。
我的问题是我需要在调用递归之前和完成递归之后做一些事情,而 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)
有什么解决办法吗?
您可以使用 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()
或者您可以使用 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