优草派  >   Python

python遍历一个目录?

陈伟杰            来源:优草派

Python遍历一个目录

在Python中,遍历一个目录很简单,使用os模块提供的相应函数即可。本文将分别介绍os.listdir()、os.walk()、os.scandir()三个函数的用法,并比较它们之间的异同点。

python遍历一个目录?

一、os.listdir()

os.listdir()是os模块提供的最简单的遍历目录的函数,它返回指定路径下所有文件和目录的文件名列表。这里需要说明一下,os.listdir()并不是按照字典序来排序的,这就需要我们人为根据需要进行排序。下面是os.listdir()的用法:

import os

path = "/path/to/directory"

files = os.listdir(path)

for file in files:

print(file)

os.listdir()对于简单的,不需要特殊处理的目录遍历来说,是最好的选择。

二、os.walk()

os.walk()是一个生成器,递归地遍历指定目录下所有文件和子目录。对于每一个目录,它将返回一个三元组(dirpath, dirnames, filenames),dirpath表示该目录所在的路径,dirnames是一个列表,包含了该目录下所有子目录的名称,filenames也是一个列表,包含了该目录下所有非目录文件的名称。下面是os.walk()的用法:

import os

path = "/path/to/directory"

for dirpath, dirnames, filenames in os.walk(path):

# print current directory path

print('Current Directory: ', dirpath)

# print subdirectories in current directory loop

for dirname in dirnames:

print('Subdirectory: ', dirname)

# print all non-directory files in current directory loop

for filename in filenames:

print('File inside Directory: ', filename)

os.walk()更加实用的一点在于它的生成器性质,可以同时对多个目录进行遍历。

三、os.scandir()

os.scandir()是Python3.5引入的函数,比os.listdir()和os.walk()更快,更加高效。os.scandir()函数返回一个迭代器,遍历指定目录下所有文件和目录的名字,其中每个元素都是一个目录项信息,可以通过调用dir_entry.name、

dir_entry.inode()、dir_entry.is_dir()等函数来获取文件或目录的详细信息。下面是os.scandir()的用法

import os

path = "/path/to/directory"

with os.scandir(path) as it:

for entry in it:

if entry.is_file():

print('File Name:', entry.name)

else:

print('Directory Name:', entry.name)

os.scandir() 对于高效遍历大型目录和执行文件系统状态操作是最好的,但是需要Python3.5以上的版本才能使用。

四、三种函数的比较

在使用os遍历目录时,需要对自己的需求有个大致的把握,根据自己的需求来选择最为合适的函数。

函数 简单程度 可扩展性 效率

os.listdir() ★★★★★ ★★ ★★★

os.walk() ★★ ★★★ ★★

os.scandir() ★ ★★★★ ★★★★

五、总结

本文分别介绍了os.listdir()、os.walk()、os.scandir()三个函数,并比较了它们之间的异同点。os.listdir()简单实用,os.walk()可以同时对多个目录进行遍历,os.scandir()效率更高,但需要Python3.5以上版本的支持。在使用时,根据自己的需求选择最为适合的函数即可。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行