之前学了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 # 延伸用法,可以把文件名取出,然后跟规则进行匹配判断
下一篇: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
- 文章评论 -
- 最新评论[0条评论] -
版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 |
逍遥峡谷 ·
酷品优选
Copyright©Interstellar Central Occult Agency (I.C.O.A)
本局纯属虚构,如有雷同,纯属巧合