Python标准库glob介绍

一、 glob模块通配符

通配符 功能

*

匹配0或多个字符

**

匹配所有文件,目录,子目录和子目录里面的文件 (3.5版本新增)

匹配一个字符,这里与正则表达式? (正则?匹配前面表达式0次或者1次)

[]

匹配指定范围内的字符,如: [1-9]匹配1至9内的字符

[!]

匹配不在指定范围内的字符

1、通配符

星号(*)匹配零个或多个字符

import glob
for name in glob.glob('dir/*'):
print (name)
dir/file.txt
dir/file1.txt
dir/file2.txt
dir/filea.txt
dir/fileb.txt
dir/subdir

列出子目录中的文件,必须在模式中包括子目录名:

import glob

#用子目录查询文件
print ('Named explicitly:')
for name in glob.glob('dir/subdir/*'):
print ('\t', name)
#用通配符* 代替子目录名
print ('Named with wildcard:')
for name in glob.glob('dir/*/*'):
print ('\t', name)
Named explicitly:
dir/subdir/subfile.txt
Named with wildcard:
dir/subdir/subfile.txt

2、单个字符通配符

用问号(?)匹配任何单个的字符。

import glob

for name in glob.glob('dir/file?.txt'):
print (name)
dir/file1.txt
dir/file2.txt
dir/filea.txt
dir/fileb.txt

3、字符范围

当需要匹配一个特定的字符,可以使用一个范围

import glob
for name in glob.glob('dir/*[0-9].*'):
print (name)
dir/file1.txt
dir/file2.txt

二、glob模块iglob 返回iterator执行效率更高

1.当前路径文件tmp下py文件,使用iglob,返回迭代器效率更高

for fname in glob.iglob("./tmp/*.py"):
print(fname)

三、其他

1.转移字符

specials = '?*['

for char in specials:
pattern = '**/*' + glob.escape(char) + '.txt'
print('Searching for: {!r}'.format(pattern))
for name in sorted(glob.glob(pattern,recursive=True)):
print(name)
print()

Python标准库OS介绍

os模块的常见功能

os模块自带的文件和文件夹操作方法都非常有用。

  • 得到当前工作目录的路径: os.getcwd()

  • 改变当前工作目录: os.chdir(path)

  • 返回指定目录下的所有文件和目录名:os.listdir(path)

  • 函数用来删除一个文件:os.remove(path)和os.unlink(path)

  • 检验给出的路径是否是一个文件:os.path.isfile(path)

  • 检验给出的路径是否是一个目录:os.path.isdir(path)

  • 判断是否是绝对路径:os.path.isabs()

  • 检查是否快捷方式os.path.islink (filename )

  • 检验给出的路径是否真地存在:os.path.exists(path)

  • 返回一个路径的目录名和文件名:os.path.split() eg os.path.split('/home/python/django.html') 结果:('/home/python', 'django.html')

  • 拼接工作路径: os.path.join(str1, str2, str3..)

  • 分离扩展名:os.path.splitext()

  • 获取路径名:os.path.dirname(path)

  • 获取文件名:os.path.basename()

  • 运行shell命令: os.system()

  • 读取和设置环境变量:os.getenv() 与os.putenv()

  • 给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'

  • 指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

  • 重命名:os.rename(old, new)

  • 创建多级目录:os.makedirs(r“c:\python\test”)

  • 创建单个目录:os.mkdir(“test”)

  • 删除单个目录: os.rmdir(“test"

  • 删除多个目录:os.removedirs(r“c:\folder”)

  • 获取文件属性:os.stat()

  • 修改文件权限与时间戳:os.chmod()

  • 终止当前进程:os.exit()

  • 获取文件大小:os.path.getsize(filename)

值得注意的是windows和Linux采用了不同的路径分隔符(“/”和"\"。我最喜欢的方法是os.path.join方法,提高了我们代码可移植性。比如下面代码:

os.path.join("python", "django", "some.py")
  • 在windows下返回python\django\some.py

  • 在linux下返回python/django/some.py

我们接下来看几个利用os模块操作文件的实际案例。

查找某个目录下的全部txt文件并删除。

假设我们在当前工作目录下有个叫tutorial的文件夹,我们要把里面的txt文件,删除,我们可以这么做:

>>> import os
>>> os.getcwd() # 获取当前工作目录
'C:\\Users\\MissEnka\\Python'
>>> os.listdir('tutorial') # 查看tutorial文件夹
['notes.txt', 'pdf docs', 'txtfiles']
>>> for filename in os.listdir('tutorial'):
   if filename.endswith('.txt'):
       os.remove(os.path.join('tutorial', filename))
       print("{} deleted.".format(filename)) notes.txt deleted.

上段代码有2点需要你注意的地方,你发现没有?

  • 我们只删除了tutorial文件下的notes.txt文件,并没有删除子文件夹txtfiles里的.txt文件。想要遍历一个文件夹,查找所有目录包括子目录的文件,我们需要用到下面会提到的os.walk()方法。

  • 我们用的os.remove(os.path.join("tutorial"), filename))而不是简单用os.remove(filename)来删除文件,这是因为notes.txt相对于当前工作目录的路径是/tutorial/notes.txt, 而不是notes.txt。

使用os.walk()遍历一个文件夹子目录查找所有txt文件并删除

>>> for foldName, subfolders, filenames in os.walk('tutorial'):
   for filename in filenames:
     if filename.endswith('.txt'):
        os.remove(os.path.join(foldName, filename))
        print("{} deleted.".format(filename))

用os.walk()打印出某个文件夹下所有子目录和文件名称方法如下。来源: Automate the boring stuff with Python。

import os
folderName, subfolders, filenames in os.walk('directory'):
   print('The current folder is ' + folderName)    for subfolder in subfolders:
       print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
   for filename in filenames:
       print('FILE INSIDE ' + folderName + ': '+ filename)    print('')

利用shutil模块复制和移动文件

shutil模块可以用来复制和移动一个文件。shutil.copy()用来复制文件,第一个参数是需要复制的文件,第二个参数可以是文件夹,也可以是个文件名。如果是文件夹,新文件将存储在新文件夹里,文件名不变。如果是文件名,则新文件直接以文件名命名。shutil.copyfile()与shutil.copy()类似,只不过2个参数都必需是文件名。

>> import shutil
>> import os
>> os.chdir('C:\\')
>> shutil.copy('C:\\spam.txt', 'C:\\delicious')
'C:\\delicious\\spam.txt'
>> shutil.copy('eggs.txt', 'C:\\delicious\\eggs2.txt')
'C:\\delicious\\eggs2.txt'

shutil还常用来复制文件夹或移动文件,代码如下:

# 复制文件夹. olddir和newdir都只能是目录,且newdir必须不存在
shutil.copytree("老目录", "新目录") # 移动文件(目录)
shutil.move("老位置", "新位置")

参考博客

https://www.jianshu.com/p/05e5cebbc55e

https://www.jianshu.com/p/32e3364b22ee

https://blog.csdn.net/weixin_42134789/article/details/80362826

python文件操作glob_os_等对比的更多相关文章

  1. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  2. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  3. Python文件操作与函数目录

    文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...

  4. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  5. day8.python文件操作

    打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...

  6. 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()

    嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...

  7. Python之路Python文件操作

    Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...

  8. python 文件操作 r w a

    python基础-文件操作   一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件       打开文件时,需要指定文件路径和以何等方式打开文件, ...

  9. Python:文件操作技巧(File operation)(转)

    Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python #  -*- coding: utf8 -*- spath = " D:/dow ...

随机推荐

  1. JavaScript之最长回文字符串

    JavaScript经典面试题算法:最长回文字符串 下面的解题方法是通过中心扩散法的方式实现的,具体代码和注释如下(时间复杂度: O(n^2),空间复杂度:O(1)) // str字符串functio ...

  2. 如何在pyqt中给无边框窗口添加DWM环绕阴影

    前言 在之前的博客<如何在pyqt中通过调用SetWindowCompositionAttribute实现Win10亚克力效果>中,我们实现了窗口的亚克力效果,同时也用SetWindowC ...

  3. 布局TabBar

    布局TabBar中的items Tabbar中应该有5个Item 主页/消息/发布按钮/发现/我 布局TabBar中的Items可以通过下面的方式 通过自定义TabBar的方式 多添加一个控制器,让中 ...

  4. linux中统计文件中一个字符串出现的次数

    要统计一个字符串出现的次数,这里现提供自己常用两种方法: 1. 使用vim统计 用vim打开目标文件,在命令模式下,输入 :%s/objStr//gn 2. 使用grep: grep -o objSt ...

  5. VC 获取当前运行窗口名称

    转载请注明来源:https://www.cnblogs.com/hookjc/ BOOL CALLBACK WindowChild(HWND hwnd,LPARAM lparam){ CFGDlg* ...

  6. ANT中的copy和move标签

    Copy标签 该标签用于文件或文件集的拷贝,其属性如下: file 表示源文件. tofile 表示目标文件. todir 表示目标目录. overwrite 表示指定是否覆盖目标文件,默认值是不覆盖 ...

  7. .NET 云原生架构师训练营(权限系统 RGCA 开发任务)--学习笔记

    目录 目标 模块拆分 OPM 开发任务 目标 基于上一讲的模块划分做一个任务拆解,根据任务拆解实现功能 模块拆分 模块划分已经完成了边界的划分,边界内外职责清晰 OPM 根据模块拆分画出 OPM(Ob ...

  8. MLlib学习——降维

    降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段,它可以减少计算过程中考虑到的随机变量(即特征)的个数,其被广泛应用于各种机器学习问题中,用于消除噪声.对 ...

  9. Redis 源码简洁剖析 12 - 一条命令的处理过程

    命令的处理过程 Redis server 和一个客户端建立连接后,会在事件驱动框架中注册可读事件--客户端的命令请求.命令处理对应 4 个阶段: 命令读取:对应 readQueryFromClient ...

  10. 05 BOM与DOM

    BOM和DOM 1. 什么是BOM和DOM 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的 ...