zoukankan      html  css  js  c++  java
  • 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_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 的子目录,默认为 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_locationDemo03ddt_demodsldls")

    目录结构:

     运行结果:

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

    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():获取文件大小

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

  • 相关阅读:
    camke 参数
    17.计算1-100之和+1-50的平方和+1-10的倒数
    16.求Sn=a+aa+aaa+aaaa.......之值
    15.计算1!+2!+3!+.....20!=?
    14.输出所有的“水仙花”
    13.企业发放的奖金根据利润提成
    12.输入一个成绩计算其A,B,C,D,E等级
    11.键盘输入小于1000的整数
    10.求方程的根
    2019考研历程回顾
  • 原文地址:https://www.cnblogs.com/marvintester/p/14481868.html
Copyright © 2011-2022 走看看