Python遍历一个目录
在Python中,遍历一个目录很简单,使用os模块提供的相应函数即可。本文将分别介绍os.listdir()、os.walk()、os.scandir()三个函数的用法,并比较它们之间的异同点。
一、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以上版本的支持。在使用时,根据自己的需求选择最为适合的函数即可。