python os.walk
2020-06-17 本文已影响0人
卡拉肖克_潘
今天在python3.6.8版本上使用os.path.walk发现没有这个模块了,取而代之的是os.walk。
os.walk(top,topdown=True,onerror=None)
top----------表示需要遍历的顶级目录的路径。
topdown------的默认值是“True”表示首先返回顶级目录下的文件,然后再遍历子目录中的文件。
当topdown的值为"False"时,表示先遍历子目录中的文件,然后再返回顶级目录下的文件。
onerror------默认值为"None",表示忽略文件遍历时的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历。
返回值:函数返回一个元组,含有三个元素。这三个元素分别是:每次遍历的路径名、路径下子目录列表、目录下文件列表。
下面是用os.walk()写的一个文件搜索例子:
def search(basepath,name):
for root, dirs, files in os.walk(basepath):
if name in dirs or name in files:
root = str(root)
dirs = str(dirs)
return os.path.join(root, dirs)
return -1
不知道为什么os.walk的速度很慢。
用os.listdir递归一个试试:https://blog.csdn.net/sinat_29957455/article/details/82778306
def get_file_path(root_path,file_list,dir_list):
#获取该目录下所有的文件名称和目录名称
dir_or_files = os.listdir(root_path)
for dir_file in dir_or_files:
#获取目录或者文件的路径
dir_file_path = os.path.join(root_path,dir_file)
#判断该路径为文件还是路径
if os.path.isdir(dir_file_path):
dir_list.append(dir_file_path)
#递归获取所有文件和目录的路径
get_file_path(dir_file_path,file_list,dir_list)
else:
file_list.append(dir_file_path)
if __name__ == "__main__":
#根目录路径
root_path = r"D:\test"
#用来存放所有的文件路径
file_list = []
#用来存放所有的目录路径
dir_list = []
get_file_path(root_path,file_list,dir_list)
print(file_list)
print(dir_list)