之前学了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 数字与数字型运算 - 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
Python 数据分析第三方库 Numpy 的安装和使用 - 2020-02-03
- 文章评论 -
- 最新评论[0条评论] -
版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 |
逍遥峡谷 ·
酷品优选
Copyright©Interstellar Central Occult Agency (I.C.O.A)
本局纯属虚构,如有雷同,纯属巧合