Python 目录与文件遍历:os.listdir 与 os.walk 详解
本文介绍 Python 中扫描目录的两种核心方法:os.listdir 和 os.walk。os.listdir 返回当前路径文件名列表,需递归获取子目录文件;os.walk 则通过三元组 (root, dirs, files) 高效遍历目录树。文章还列举了 os.path 模块中分离文件名、判断存在性及获取大小等常用辅助方法,帮助开发者批量处理文件与目录。
Python 目录扫描概述
在实际开发中,经常需要扫描指定目录并对文件进行批量处理。针对这一需求,本文对 Python 中的目录处理机制进行了梳理与总结。Python 提供了两种主要的目录扫描方式:os.listdir 和 os.walk。
os.listdir 方法详解
一、os.listdir 方法
os.listdir() 函数用于返回指定目录下包含的文件或子目录名称列表,结果按字母顺序排列。需要注意的是,该函数仅返回当前路径下的文件名,不包含子目录中的文件;若需获取所有层级的文件,必须配合递归使用。此外,返回的列表中不包含 '.' 和 '..',即使它们存在于目录中。
语法格式如下:
os.listdir(path)
实例代码
def list_dir(file_dir):
'''
通过 listdir 得到的是仅当前路径下的文件名,不包括子目录中的文件,如果需要得到所有文件需要递归
'''
print'\n\n<><><><><><> listdir <><><><><><>'
print "current dir : {0}".format(file_dir)
dir_list = os.listdir(file_dir)
for cur_file in dir_list:
# 获取文件的绝对路径
path = os.path.join(file_dir, cur_file)
if os.path.isfile(path): # 判断是否是文件还是目录需要用绝对路径
print "{0} : is file!".format(cur_file)
if os.path.isdir(path):
print "{0} : is dir!".format(cur_file)
list_dir(path) # 递归子目录
os.walk 方法详解
二、os.walk 方法
os.walk() 函数用于在目录树中遍历并输出文件名,支持向上或向下遍历。作为一个简单易用的文件与目录遍历器,它能帮助开发者高效地处理文件和目录相关任务。
语法格式如下:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
方法参数说明:
- top:指定要遍历的目录路径。
- topdown:可选参数。若为 True,则优先遍历 top 目录及其子目录;若为 False,则优先遍历 top 的子目录。默认值为 True。
- onerror:可选参数,需为一个可调用对象。当 walk 发生异常时调用该对象。
- followlinks:可选参数。若为 True,则会遍历符号链接(Linux 下)实际指向的目录;默认值为 False。
- args:包含那些没有 '-' 或 '--' 的参数列表。
返回值: 三元组 (root, dirs, files)
- root :表示当前正在遍历的目录地址。
- dirs :当前文件夹中所有目录名称的列表(不包括子目录)。
- files :当前文件夹中所有的文件列表(不包括子目录中的文件)。
实例
def work_dir(file_dir):
print'\n\n<><><><><> work dir <><><><><>'
for root, dirs, files in os.walk(file_dir):
print'\n========================================'
print "root : {0}".format(root)
print "dirs : {0}".format(dirs)
print "files : {0}".format(files)
for file in files:
try:
print'-----------------------------------'
file_name = os.path.splitext(file)[0]
file_suffix = os.path.splitext(file)[1]
file_path = os.path.join(root, file)
file_abs_path = os.path.abspath(file)
file_parent = os.path.dirname(file_path)
print "file : {0}".format(file)
print "file_name : {0}".format(file_name)
print "file_suffix : {0}".format(file_suffix)
print "file_path : {0}".format(file_path)
print "file_abs_path : {0}".format(file_abs_path)
print "file_parent : {0}".format(file_parent)
except Exception, e:
print "Exception", e
其他常用文件处理方法
三、其他跟文件相关的常用方法
os.path.splitext():用于分离文件名和扩展名。
file = "file_test.txt"
file_name = os.path.splitext(file)[0] # 输出:file_test
file_suffix = os.path.splitext(file)[1] # 输出:.txt
os.path.exists():用于判断文件或目录是否存在。
os.path.isfile():用于判断路径是否为文件。
os.path.isdir():用于判断路径是否为目录。
os.path.dirname():用于获取当前文件所在的父目录。
os.makedirs():用于创建多级目录。
os.mkdir():用于创建单级目录。
os.path.getsize():用于获取文件大小。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









