• 您当前位置:网站首页 >> Python学习 >> Python 搜索、遍历文件、文件夹和查看文件信息
  • Python 搜索、遍历文件、文件夹和查看文件信息

    iCoA首席特工 逍遥峡谷 发布:2019-12-22 更新:2020-01-07 浏览0条评论
    内容简介

    相关关键词:Python   os   fnmatch   time   datetime   glob  

    本文链接:https://www.icoa.cn/a/879.html

    本站文章如非注明皆为原创,未经允许禁止转载。如有问题可以给我留言或发邮件。

    之前学了Python 使用os模块显示某个目录下的文件和文件夹,而我们想要显示某目录下面所有的文件(包含子文件夹以及子文件夹的子文件夹下面的文件),或者读取某文件的文件信息,或者搜索相关文件等。后面就可以用Python 读取和写入文件了。

    更多Python相关文章点击:Python学习日志目录


    首先要用到os.walk()函数。

    os.walk() 遍历某目录下所有子文件夹和文件

    os.walk() 函数有 dirpath/dirnames/files 三个属性

    # 使用前首先要引入os模块,一个程序文件引入一次就可以了,下面默认都已引入os模块
    import os
    # 遍历当前目录下所有文件和子文件夹文件
    for dirpath,dirnames,files in os.walk('./'):
        print(f'发现文件夹:{dirpath}')
        print(files)
    ''' 输出结果
    发现文件夹:./
    ['demo.png', 'game.py', 'game.single.py', 'game.zip', 'qa.py', 'test.py', 'view.py']
    发现文件夹:./WeChat
    ['test_bot.py', 'WechatBot.py']
    发现文件夹:./子文件夹
    ['子文件夹的文件.txt']
    发现文件夹:./子文件夹\孙文件夹
    ['孙文件夹文件.txt']
    发现文件夹:./子文件夹\孙文件夹\重孙文件夹
    ['这是一个文件.txt']
    '''


    os.scandir() 返回的文件可以使用.stat()都可以查看文件信息

    for file in os.scandir():
        print(file.name,file.stat())
    ''' 运行结果
    demo.png os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=31502, st_atime=1576983566, st_mtime=1576858244, st_ctime=1576858244)
    game.py os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=7919, st_atime=1576919981, st_mtime=1576891665, st_ctime=1576824155)
    '''


    os.stat() 可以查看指定文件的文件信息

    print(os.stat('WeChat/WechatBot.py'))
    # 路径可以使用相对路径也可以使用绝对路径,推荐使用相对路径


    其中文件信息属性代表的是:

    st_size: 文件大小(单位是B),除以1024就是KB

    st_atime: 文件最近访问时间

    st_mtime: 文件最近修改时间

    st_ctime: Windows系统下表示文件创建时间

    st_birthtime: Mac/Linux系统下文件创建时间


    # 文件大小
    for file in os.scandir():
        print(file.name,file.stat().st_size / 1024,'KB')
    ''' 运行结果
    demo.png 30.763671875 KB
    game.py 7.7333984375 KB
    '''
    
    # 创建时间(Windows 下)
    for file in os.scandir():
        print(file.name,file.stat().st_ctime)
    ''' 运行结果
    demo.png 1576858244.9686193
    game.py 1576824155.55
    '''
    
    # 后面1576858244.9686193是时间戳,需要通过time模块转换成标准的时间格式
    # 引入time模块
    import time
    print(time.ctime(1576858244.9686193))
    ''' 输出结果
    Sat Dec 21 00:10:44 2019
    '''
    
    # 结合os模块和time模块,这里默认已引入相关模块
    for file in os.scandir():
        print(file.name,time.ctime(file.stat().st_ctime))
    ''' 输出结果
    demo.png Sat Dec 21 00:10:44 2019
    game.py Fri Dec 20 14:42:35 2019
    '''
    
    # 同样可以使用datetime模块来转换成更易读的时间日期格式
    # 引入datetime模块
    import datetime
    t = datetime.datetime.fromtimestamp(1576824155.55)
    yr = t.year
    mo = t.month
    da = t.day
    h = t.hour
    m = t.minute
    s = t.second
    print(t)
    print(f'{h}点{m}分{s}秒')
    print(f'{yr}年{mo}月{da}日 {h}点{m}分{s}秒')
    ''' 运行结果
    2019-12-20 14:42:35.550000
    14点42分35秒
    2019年12月20日 14点42分35秒
    '''


    搜索某个关键词的文件和文件夹

    搜索是否包含某个关键词可以用到字符串的两个内置方法

    .startswith() 开始包含

    .endswith() 结尾包含

    # 用法 字符串A.startswith(字符串B) / 字符串A.endswith(字符串B)
    a = 'demo.png'
    b = 'de'
    print(a.startswith(b))
    # 运行结果 True
    
    a = 'game.py'
    c = '.py'
    print(a.startswith(c))
    # 运行结果 True


    glob模块

    可以使用glob.glob()搜索当前目录下相关文件

    # 引入glob模块
    import glob
    # 搜索本目录下所有.py文件
    print(glob.glob('*.py'))
    ''' 运行结果
    ['game.py', 'game.single.py', 'test.py']
    '''
    
    # 搜索开头是game的.py文件
    print(glob.glob('game*.py'))
    ''' 运行结果
    ['game.py', 'game.single.py']
    '''
    
    '''搜索的时候,除了可以用*,还可以下面的符号:
    * 匹配所有字符
    ? 匹配单个字符
    [seq] 匹配序列中的任何字符
    [!seq] 匹配不在序列中的任何字符'''
    print(glob.glob('demo[0-9].png'))
    ''' 运行结果
    ['demo1.png', 'demo2.png']
    '''
    
    print(glob.glob('test[1,3].py'))
    ''' 运行结果
    ['test1.py', 'test3.py']
    '''
    
    # 搜索子文件夹和子文件下面的所有文件
    print(glob.glob('**/*.py',recursive=True))
    # ** 代表任意层文件和文件夹
    # recursive=True 不断进入文件夹下面
    ''' 运行结果
    ['game.py', 'game.single.py', 'test.py', 'WeChat\\test_bot.py', 'WeChat\\WechatBot.py', '子文件夹\\qa.py', '子文件夹\\view.py', '子文件夹\\孙文件夹\\test1.py', '子文件夹\\孙文件夹\\test2.py', '子文件夹\\孙文件夹\\test3.py']
    '''


    fnmatch模块

    fnmatch.fnmatch() 可以用来判断文件名是否匹配

    # 首先引入fnmatch模块
    import fnmatch
    # 判断 game.py 是否匹配 g*.py
    print(fnmatch.fnmatch('game.py','g*.py'))
    # 运行结果 True
    # 延伸用法,可以把文件名取出,然后跟规则进行匹配判断



    本文链接:https://www.icoa.cn/a/879.html
    关键词: Python   os   fnmatch   time   datetime   glob  


    如果您愿意支持本站,欢迎点击打赏哦~



    下一篇:Python 写入和读取文件

    上一篇:Python 字符串和字符串运算


    - 相关文章 -


    Python 基础知识入门演示 - 2017-12-31

    Python 数字与数字型运算 - 2020-09-08

    Python 基础知识之数据类型 - 2020-09-07

    Python 学习中非常好用的编辑器 Sublime Text 3 - 2020-09-07

    Python 基础知识之变量 - 2020-09-03

    Python 详细安装步骤图解 - 2020-09-01

    Python 数据分析模块 Pandas 之 DataFrame 数据 - 2020-02-09

    Python 数据分析模块 Pandas 之 Series 数据 - 2020-02-05


    - 文章评论 -




    3727

    [由于政策原因,您的留言如果提交成功后,需要审核才能展示,请改天再来查看,请不要重复提交,谢谢支持!]

    - 最新评论[0条评论] -


    [>>>点击查看更多评论]

    版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 | 逍遥峡谷 · 酷品优选
    Copyright©Interstellar Central Occult Agency (I.C.O.A)
    本局纯属虚构,如有雷同,纯属巧合

    冀公网安备13011102001055号 · 冀ICP备06033848号