Python实现目录文件扫描功能

2023-11-12

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

实现遍历目录文件最常用的方法是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():获取文件大小

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实现目录文件扫描功能 的相关文章

随机推荐

  • 基本类型、包装类型与自动拆装箱

    Java的8种数据类型 Java 的每个基本类型都对应了一个包装类型 比如说 int 的包装类型为 Integer double 的包装类型为 Double 基本类型 包装类 boolean Boolean byte Byte short
  • 最适合练手的第一个Qt小程序,所有代码均可复制

    文章目录 前言 一 最适合新手的第一个Qt小程序 1 1 按钮的创建 1 2 对象模型 对象树 二 Qt窗口坐标体系 三 信号和槽机制 3 1 系统自带的信号和槽 3 2 自定义信号和槽 3 3 信号槽的扩展 3 4 Qt4版本的信号和槽写
  • JWT Token 的构成以及生成过程

    一 jwt token 是什么样子的 JWT是由三段信息构成的 将这三段信息文本用点链接一起就构成了Jwt字符串 JWT字符串 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 eyJzdWIiOiIxMjM0NTY
  • 06-1_Qt 5.9 C++开发指南_对话框与多窗体设计_标准对话框

    在一个完整的应用程序设计中 不可避免地会涉及多个窗体 对话框的设计和调用 如何设计和调用这些对话框和窗体是搞清楚一个庞大的应用程序设计的基础 本章将介绍对话框和多窗体设计 调用方式 数据传递等问题 主要包括以下几点 Qt 提供的标准对话框的
  • 给定一个非负整数数组,你最初位于数组的第一个位置... --错误方法纠正

    力扣55题 闹心 太闹心了 上周空闲时间写了一个自动钻取的 结果发现把0搞进去之后各种问题 房子越补漏雨越大 刚才琢磨了一下 真的是方向错了 先来聊聊之前的方案 以此数组为例 int nums 2 1 1 1 3 lastIndex num
  • 最新deepin-wine下微信的安装方法,非常简单 Ubuntu linux可用

    deepin wine阿里云镜像访问异常 可以使用以下脚本安装最新版deepin wine 微信最新版本 deepin com wechat 2 6 8 65deepin0 i386 deb 下载网址 Index of deepin poo
  • 数据结构与算法目录

    前言 数据结构与算法系列先看这里 有助于你更好地获取内容 首先明白一个问题 为什么要研究数据结构 这是因为所有的程序本质上是对数据进行处理 如何高效的处理数据 这依赖于数据本身的结构 如类型 整型 浮点型等 维数 是否为复杂类型 结构体类型
  • 常用Python PDF库对比

    2022 06 07修订 新增第三方库borb 初稿写于2021 01 02 彼时borb才发布1 0版没几个月 两年不到 Github上已近三千赞 PDF Portable Document Format 是一种便携文档格式 便于跨操作系
  • 故障树

    故障树 时间20210105 可以根据这道题目学习故障树 假设系统的可靠性逻辑框图如下所示 故障树的定义 用以表明产品哪些组成部分的故障或外界事件或它们的组合将导致产品发生一种给定故障的逻辑图 故障树是一种逻辑因果关系图 构图的元素是事件和
  • Keil编译错误error: #20: identifier "XXXX" is undefined

    问题 在使用Keil编译工程时 经常遇到提示identifier XXXX 未定义的error信息 Build target canopen mx v1d61 compiling main c Src main c 104 warning
  • SMT贴片制造:发挥的作用和价值]

    SMT贴片制造作为一项重要的电子制造技术 发挥着举足轻重的作用 并提供了巨大的价值 首先 SMT贴片制造为电子产品的制造商提供了高效 准确和可靠的生产方式 相比于传统的手工焊接 SMT贴片制造具有更高的自动化和智能化程度 大幅提高了生产效率
  • day21网络编程(下)

    day21 网络编程 下 课程目标 学会网络编程开发的必备知识点 今日概要 OSI7 层模型 TCP和UDP 粘包 阻塞和非阻塞 IO多路复用 1 OSI 7层模型 OSI的7层模型对于大家来说可能不太好理解 所以我们通过一个案例来讲解 假
  • 安装【sonar】【sonarQube】免费社区版9.9

    文章目录 sonarQube 镜像容器 Linux 安装镜像 出现 Permission denied的异常 安装sonarQube 中文包 重启服务 代码上传到sonarQube扫描 java语言配置 配置 JS TS Php Go Py
  • gitee项目克隆到本地并运行

    首先电脑上要先安装node js和git 配置一下 在gitee上找到需要克隆到本地的项目 点击克隆 下载 在点击HTTPS下面的复制 github上也是类似的方式 把项目地址复制下来 在本机电脑 新建一个文件夹 命名任意 打开新建的文件夹
  • 神经元模型介绍

    一 深度学习的背景 目前 深度学习 Deep Learning 简称DL 在算法领域可谓是大红大紫 深度学习是机器学习领域中的一个新的研究方向 模仿生人类神经网络 学习样本数据的内在规律的一种方法 神经网络属于监督学习的过程 可以处理 回归
  • SQL 语句学习总结:

    1 四范式 范式好处 数据库范式是数据表设计的规范 在范式规范下 数据库里每个表存储的重复数据降到最少 这有助于数据的一致性维护 同时在数据库范式下 表和表之间不再有很强的数据耦合 可以独立的增长 ie 比如汽车引擎的增长和汽车的增长是完全
  • 接口响应时间长,前端返回请求超时解决

    在前端代码设置axios响应时间 1 全局设置 axios defaults timeout 时间 单位为毫秒 或 2 封装的http请求 const service axios create 公共接口 这里注意后面会讲 baseURL p
  • 解决Flutter输入框限制最大输入长度时,从中间输入会自动截取掉后面的内容

    一 问题原由 当限制输入框最大输入长度时 将光标移动到中间输入 当输入的内容长度加上已经输入内容的长度大于限制的输入长度时 Flutter会将光标后面的内容进行截取掉 而当我在原生Android上验证时却是自动截取输入的内容原有的内容不动
  • 输出数组中最大、小值和下标

    详细看代码 package exp 4 public class Array01 public static void main String args int arrs 1 2 2 12 7 5 声明数组并赋值 int max arrs
  • Python实现目录文件扫描功能

    日常程序编写中常常遇到需要获取目录下文件的功能 对该功能做个简单整理 供大家参考 实现遍历目录文件最常用的方法是os listdir 还有一种os walk方法 一 os listdir方法 源码中对该方法的描述 Return a list