Python之获取文件夹中文件列表以及glob与fnmatch模块的使用
- 获取文件夹中的文件列表
- print(os.listdir("../secondPackage")) # ['__init__.py', 'secondCookBook.py', '文件与IO.py', 'testPackage', '迭代器与生成器.py']
- # 注释: curdir = '.' pardir = '..'
- print(os.listdir(os.curdir)) # ['__init__.py', 'secondCookBook.py', '文件与IO.py', 'testPackage', '迭代器与生成器.py']
- print(os.listdir(os.pardir)) # ['__init__.py', 'cookBook', 'secondPackage', 'cookBook.py']
- 通过某种方式过滤数据,可以考虑结合 os.path 库中的一些函数来使用列表推导。比如:
- 通过isfile判断是否是文件
- files=[name for name in os.listdir("../secondPackage") if os.path.isfile(os.path.join("../secondPackage",name))]
- print(files) # ['__init__.py', 'secondCookBook.py', '文件与IO.py', '迭代器与生成器.py']
- # isdir判断是否是目录
- dirs=[name for name in os.listdir("../secondPackage") if os.path.isdir(os.path.join("../secondPackage",name))]
- print(dirs) # ['testPackage']
- # 过滤一个目录的内容 startswith() 和 endswith()
- pyfiles = [name for name in os.listdir('../secondPackage')
- if name.endswith('.py')]
- print(pyfiles) # ['__init__.py', 'secondCookBook.py', '文件与IO.py', '迭代器与生成器.py']
- 文件名的匹配,你可能会考虑使用 glob 或 fnmatch 模块
- glob模块的主要方法就是glob,该方法返回所有匹配的文件路径列表(list);该方法需要一个参数用来指定匹配的路径字符串(字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。
- import glob
- # 在 secondPackage 文件夹下找所有的py 文件
- print(glob.glob(r"../secondPackage/*.py")) # ['../secondPackage/__init__.py', '../secondPackage/secondCookBook.py', '../secondPackage/文件与IO.py', '../secondPackage/迭代器与生成器.py']
- # iglob方法 获取一个迭代器( iterator )对象,使用它可以逐个获取匹配的文件路径名,与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而 glob.iglob一次只获取一个匹配路径
- print([res for res in glob.iglob(r"../secondPackage/*.py")]) # ['../secondPackage/__init__.py', '../secondPackage/secondCookBook.py', '../secondPackage/文件与IO.py', '../secondPackage/迭代器与生成器.py']
- glob模块支持的通配符:
|
|
|
|
|
|
|
|
|
|
|
|
- fnmatch模块,fnmatch、fnmatchcase、filter和translate
- fnmatch:判断文件名是否符合特定的模式。
- fnmatchcase:判断文件名是否符合特定的模式,区分大小写。
- filter:返回输入列表中,符合特定模式的文件名列表。
- translate:将通配符模式转换成正则表达式。
- import fnmatch
- print([name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,'*.py')])
- # ['__init__.py', 'secondCookBook.py', '文件与IO.py', '迭代器与生成器.py']
- namelist=os.listdir(os.curdir)
- print(fnmatch.filter(namelist,'*.py')) # 区别是接受的第一个参数是列表
- # ['__init__.py', 'secondCookBook.py', '文件与IO.py', '迭代器与生成器.py']
- fnmatch模块支持的通配符:
通配符 | 含义 |
---|---|
* | 匹配任何数量的字符 |
? | 匹配单个字符 |
[seq] | 匹配seq中的字符 |
[!seq] | 匹配除seq以外的任何字符 |
- glob模块和fnmatch模块区别
- fnmatch模块,都是利用os.listdir获取文件列表,然后通过字符串fnmatch模块进行文件名匹配的,而glob模块比较简单,直接 实现了os.listdir 加上 fnmatch的功能
- # 结合使用例子:
- pyfiles = glob.glob(r"../secondPackage/*.py")
- pystate=[(name,os.stat(name))for name in pyfiles]
- for name,state in pystate:
- print(name,state.st_size,state.st_mtime)
- # ../secondPackage/__init__.py 73 1550806762.0806901
- # ../secondPackage/secondCookBook.py 73 1550806783.724303
- # ../secondPackage/文件与IO.py 11685 1552458917.495922
- # ../secondPackage/迭代器与生成器.py 6428 1551944052.2551782
Python之获取文件夹中文件列表以及glob与fnmatch模块的使用的更多相关文章
- Python按顺序读取文件夹中文件
参考资料: https://blog.csdn.net/qq_22227123/article/details/79903116 https://blog.csdn.net/merdy_xi/arti ...
- python批量处理文件夹中文件的问题
用os模块读取文件夹中文件 原来的代码: import osfrom scipy.misc import imread filenames=os.listdir(r'./unprocess')for ...
- php获取指定文件夹中文件名称
/** * php获取指定文件夹中文件名称 * @author jackie <2018.10.10> */ public static function getFileName($fil ...
- C# 将文件夹中文件复制到另一个文件夹
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- Java访问文件夹中文件的递归遍历代码Demo
上代码: import java.io.File; /* * 需求:对指定目录进行所有内容的列出(包含子目录中的内容) * 也可以理解为 深度遍历. */ public class FindAllFi ...
- C#实现对指定文件夹中文件按修改时间排序
string path = "~/Document/Introduction/团队管理制度/"; DirectoryInfo dirinfo = new Di ...
- 【linux】复制文件夹中文件,排除部分文件
如下 cp `ls|grep -v -E '*json|out'|xargs` /home/data/ 用grep -v 表示排除, -E 表示正则 ls|grep -v -E '*json|out ...
- python文件夹中文件读取踩坑
Q: 进行数据集图片预处理时,初始命名如下图(Fig1左),发现读取文件时,读取的结构并非如所设想的那样顺序读取 Fig 1 A: pyhton读取文件的时候,按照文件名的ascii码中的顺序进行逐位 ...
- 使用java读取文件夹中文件的行数
使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个 ...
随机推荐
- luogu P3411 序列变换
链接 P3411 序列变换 如果要最小化答案,那么就最大化不移动的数. 那么不移动的子序列一定是最后答案的一段连续区间,而移动的数我们是一定有办法把他们还原的. 设\(f_{i}\)表示\(i\)点的 ...
- bzoj3772 精神污染 dfs 序+主席树
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3772 题解 很简单的一道题目. 上午研究一个题目的时候发现了这个题目是一个弱化版,所以来写了一 ...
- js中关键字 const , let , var 的用法区别
1.const定义的变量不可以修改,而且必须初始化. 2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 3.let是块级作用域,函数内部使用let定义后,对函数外部无影响 ...
- NOIP2015 提高组 Day T3 斗地主
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共5张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4< ...
- 对eventloop的研究
javasctipt是一门单线程的非阻塞的脚本语言,单线程意味着,JavaScript 单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务. JavaScript ...
- Dubbo学习-4-dubbo简单案例-2-服务提供者和消费者配置
在上一篇帖子的基础上,开始使用dubbo来实现RPC调用: 根据dubbo的架构图可知,需要做以下几件事情: 1.将服务提供者注册到注册中心(暴露服务) (1)引入dubbo依赖, 这里依赖2.6.2 ...
- dede织梦5.7上传图片302以及Error #2038问题解决
dede织梦5.7上传图片302以及Error #2038问题解决 三月 19, 2012 · Posted in DEDE二次开发, PHP Number of View: 1388 在后台图片集 ...
- RSS(简易信息聚合)和jieba(第三方分词组件)
简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议.RSS(Really Simple Syndication)是一种描述和同步网站的内容格式,是使用最广 ...
- 批量搞机(二):分布式ELK平台、Elasticsearch介绍、Elasticsearch集群安装、ES 插件的安装与使用
一.分布式ELK平台 ELK的介绍: ELK 是什么? Sina.饿了么.携程.华为.美团.freewheel.畅捷通 .新浪微博.大讲台.魅族.IBM...... 这些公司都在使用 ELK!ELK! ...
- 牛客网暑期ACM多校训练营(第五场) F - take —— 期望+树状数组+逆元
看到一篇好的博客特意转出来观摩大佬:转:https://blog.csdn.net/greybtfly/article/details/81413526 题目大意:给n个箱子排成一排,从头到尾按顺序依 ...