Python实现目录文件扫描功能

日常程序编写中常常遇到需要获取目录下文件的功能,对该功能做个简单整理,供大家参考。

实现遍历目录文件最常用的方法是os.listdir(),还有一种os.walk方法。
一、os.listdir方法

源码中对该方法的描述“Return a list containing the names of the files in the directory.” 入参为目录,返回目录下的所有文件名,以列表的形式。返回的列表是无序的,但是不包括特殊条目“.”、“..” , 即使它们在目录中是存在的。

语法格式如下:

  1. 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_location\Demo03\ddt_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("\n ************ 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_location\Demo03\ddt_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 的子目录,默认为 True
  • onerror: 可选, 需要一个 callable 对象,当 walk 异常时调用
  • followlinks:可选, 如果为 True,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录,默认为 False
  • args:包含那些没有 ‘-‘ 或 ‘—‘ 的参数列表

返回值: 三元组 (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_location\Demo03\ddt_demo\dsldls")

目录结构:

 

 

 运行结果:

 

 

 

三、其他跟文件相关的常用方法

os.path.splitext()分离文件名和文件扩展名

  1. file = "test.txt"
  2. file_name = os.path.splitext(file)[0]
  3. file_suffix = os.path.splitext(file)[1]
  4. # 执行结果,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():获取文件大小

 

以上内容为本次分享的主要内容,希望对大家工作学习中能有所帮助!感谢!

posted @ 2021-03-04 17:48  MaxYong  阅读(668)  评论(0编辑  收藏  举报