日常程序编写中常常遇到需要获取目录下文件的功能,对该功能做个简单整理,供大家参考。
实现遍历目录文件最常用的方法是os.listdir()
,还有一种os.walk
方法。
一、os.listdir
方法
源码中对该方法的描述“Return a list containing the names of the files in the directory.” 入参为目录,返回目录下的所有文件名,以列表的形式。返回的列表是无序的,但是不包括特殊条目“.”、“..” , 即使它们在目录中是存在的。
语法格式如下:
os.listdir(path)
举个栗子:
1 def get_dirnames(filePath): 2 lists = os.listdir(filePath) 3 # 打印获取files name列表信息 4 print(lists) 5 # 调用方法,传入指定目录 6 get_dirnames("D:Python_locationDemo03ddt_demo")
执行结果:
返回列表信息['10.txt', '121212.txt', '1232323.py', '21.txt', '2121.py', 'ddt_test.py', 'send_email.py', '__init__.py']
是无序的。
通过listdir
得到的仅是当前路径下的文件名,不包括子目录中的文件,如果需要得到所有文件可以使用递归方法。可参考如下demo:
1 def get_dirnames(filePath): 2 print(" ************ listdir demo ************") 3 print("current dir : {0}".format(filePath)) 4 lists = os.listdir(filePath) 5 # 打印获取files name列表信息 6 print(lists) 7 for cur_file in lists: 8 # 遍历出lists内的文件名并拼接filePath,使得到一个新的路径或者文件绝对路径 9 path = os.path.join(filePath, cur_file) 10 # 判断新的路径是否是文件:是文件则不需要继续查看,是目录则需要继续遍历该目录下的文件名 11 # if os.path.isfile(path): 12 # print("{0} is file!".format(cur_file)) 13 if os.path.isdir(path): 14 # print("{0} is dir!".format(cur_file)) 15 # 如果是目录,继续递归该目录,重复调用get_dirnames方法递归目录 16 get_dirnames(path) 17 # 调用方法,传入指定目录 18 get_dirnames("D:Python_locationDemo03ddt_demo")
实际目录:
运行结果:
逐个目录输出目录下的所有文件信息。能够得到所有文件名,但是引用不方便,以下代码可供参考。
1 import os 2 def new_report(testreport): 3 """ 4 生成最新的测试报告文件 5 :param testreport: 6 :return:返回文件 7 """ 8 lists = os.listdir(testreport) 9 lists.sort(key=lambda fn: os.path.getmtime(testreport + "\" + fn)) 10 file_new = os.path.join(testreport, lists[-1]) 11 return file_new
1、读取指定目录下的所有文件名
2、排序(项目中是按照时间顺序排列)后取最新的文件
3、返回值(最新文件全名)
二、os.walk
方法
os.walk()
方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
语法格式如下:
os.walk(top, topdown=True, onerror=None, followlinks=False)
方法参数说明:
top
:要遍历的目录的路径topdown
:可选,如果为 True,则优先遍历 top 目录,以及 top 目录下的每一个子目录,否则优先遍历 top 的子目录,默认为 Trueonerror
: 可选, 需要一个 callable 对象,当 walk 异常时调用followlinks
:可选, 如果为 True,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录,默认为 Falseargs
:包含那些没有 ‘-‘ 或 ‘—‘ 的参数列表
返回值: 三元组 (dirpath, dirnames, filenames
)
dirpath
:所指的是当前正在遍历的目录的地址dirnames
:当前文件夹中所有目录名字的 list (不包括子目录)filenames
:当前文件夹中所有的文件 (不包括子目录中的文件)
1 import os 2 def get_file_name(filePath): 3 ab = os.walk(filePath) 4 for i, j, k in ab: 5 print("*********打印i的内容*************") 6 print(i) 7 print("*********打印j的内容*************") 8 print(j) 9 print("*********打印k的内容*************") 10 print(k) 11 get_file_name("D:Python_locationDemo03ddt_demodsldls")
目录结构:
运行结果:
三、其他跟文件相关的常用方法
os.path.splitext()
分离文件名和文件扩展名
file = "test.txt"
file_name = os.path.splitext(file)[0]
file_suffix = os.path.splitext(file)[1]
# 执行结果,file_name: text file_suffix: .txt
os.path.exists
:判断文件或目录是否存在
os.path.isfile()
:判断是否是文件
os.path.isdir()
:判断是否是目录
os.path.dirname()
:获取当前文件所在的目录,即父目录
"""该方法常用于获取当前文件的目录,并以此获取根目录,作为base directory,拼接路径获取文件""" # 获取当前文件所在目录 os.path.dirname(__file__) # 获取当前文件所在目录的上级目录(一般框架中为项目根目录) os.path.dirname(os.path.dirname(__file__))
os.makedirs()
:创建多级目录
os.makedir()
:创建单级目录
os.path.getsize()
:获取文件大小
以上内容为本次分享的主要内容,希望对大家工作学习中能有所帮助!感谢!