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模块支持的通配符:
通配符 |
功能 |
* |
匹配0或多个字符 |
** |
匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增) |
? |
匹配1个字符,与正则表达式里的?不同 |
[exp] |
匹配指定范围内的字符,如:[1-9]匹配1至9范围内的字符 |
[!exp] |
匹配不在指定范围内的字符 |
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类用来统计文件的行数,于是花了两个 ...
随机推荐
- python的list内存分配算法
前提:python为了提高效率会为list预先分配一定的内存空间供其使用,避免在每次append等操作都去申请内存,下面简单分析下list的内存分配算法,主要就是两段. 1.当没有元素时,newsiz ...
- readlink 查看符号链接的文件的内容
1. 命令功能 readlink 查看软链接文件里的真实内容. 2. 语法格式 readlink [option] file 参数 参数说明 -f 后跟软链接文件 3. 使用范例 范例1 查看文件链 ...
- ps:界面概览
首先我们来认识一下Photoshop的界面组成,如下图是一个典型的界面.为了方便识别,我们加上了颜色和数字. 1:顶部的红色区域是菜单栏,包括色彩调整之类的命令都存放在从菜单栏中.在我们的教程中使用[ ...
- java 关键字volatile
一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...
- ES集群health为yellow解决办法
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11766147.html Logstash导入数据后,Cerebro显示集群health的状态为yell ...
- 032:DTL常用过滤器(1)
为什么需要过滤器: 在DTL中,不支持函数的调用形式‘()’,因此不能给函数传递参数,这将有很大的局限性:而过滤器其实就是一个函数,可以对需要处理的参数进行处理,并且还可以额外接受一个参数(也就是说: ...
- element中的表格处理:循环出表格数据
最近要做一个表格,但是为了方便维护,我们需要把表格数据循环出来,方便加减节点: <template> <el-table :data="tableData" st ...
- datatables屏蔽警告弹窗
//不显示任何错误信息 $.fn.dataTable.ext.errMode = 'none'; //以下为发生错误时的事件处理,如不处理,可不管. $('#tableId').on( 'error. ...
- UI自动化前置代码
一.前置代码: #导入包selenium from selenium import webdriverimport time#创键一个火狐对象driver=webdriver.Firefox()#防问 ...
- [NOIP2014]飞扬的小鸟[DP]
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...