os模块、文件压缩 、匹配文件后缀名:fnmatch glob
一、os模块
os模块:是python是系统交互的模块
import os
# 0平台信息的一些操作
python是夸平台的,所以内部兼容了不同的平台
1. os.name # 操作系统 nt是win
2. os.sep # 路径的分隔符。 win是'\\' linux是’/‘
3. os.environ # 获取环境变量
os.getenv('PATH') # 获取指定的环境变量,设置自己扩展 # 1切换工作路径
文件的创建,修改等都是在工作路径下进行的
win下有两种切换路径的方式:
1. r'd:\python\liv' # 使用原生字符串避免转义
2. 'd:\\python\\liv' # 使用\\进行转义
os.getcwd() # 获取当前工作路径
os.chdir('d:\\python') # 更改当前的工作路径
os.getcwd() # 获取当前工作路径,查看变化 # 2 执行系统命令
执行系统命令os有两个方法:
system 无返回值
popen 有返回值
os.system('dir') # 直接打印使用窗口自带编码
r = os.popen('dir') # 存储到r中
r.read() # 通过r来读取,自己转码 # 3.目录操作
# 创建
os.mkdir('test') # 只能生成一个文件夹
os.mkdir(r'.\test\1')
os.makedirs(r'test2\1\2') # 递归创建,全部文件都存在则报错
os.mkkedirs(r'test2\1\2') # 文件存在不报错,就不会创建了 # 重命名
os.rename('test', 'lh') # 文件夹重命名 # 删除
os.rmdir('test/1') # 删除单个文件夹,文件夹为空时才能删除,一般先删文件,再山文件夹
os.removedirs('test/1/2/3') # 删除一个文件夹时,如果上级为空,就一起删除,递归上去 os.remove('tste2\1\2\3\1.txt') # 删除单个文件 #4. 子目录操作
os.listdir() # 列出工作目录(或其他路径)下的文件与文件夹 5. 获取文件或目录信息
os.stat('temp') # 获取文件的大小,各种时间,组信息等
#st_atime: 上次访问的时间。
#st_mtime: 最后一次修改的时间。
#st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,
#在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
os.path.getsize()
os.path.isdir()
os.paht.isfile()
#6. 路径相关path
path是os包中的一个子类: # 路径拼接
a = os.path.join(os.getcwd(),'test') # 拼接路径
os.path.exists(a) # 判断路径是否存在
os.path.isdir(a) # 判断是否是一个文件夹 # 绝对路径和相对路径
os.path.abspath('.') # 获取绝对路径
os.path.isabs('.') # 判断是否为绝对路径,不存在也可以
os.path.relpath(a,b) # 返回一个以b为绝对路径,a在b中的相对路径;以b为基准
os.path.relpath(r'C:\Users\LH\tste2\1\2\3.txt',r'C:\Users\LH\tste2\1\2\3\2.txt') # 路径分割
a = r'C:\Users\LH\tste2\1\2\3'
a.split('\\') # 在跨平台,只能手动来搞,使用字符串的方法来分割
a.split(os.sep) # 兼容跨平台,使用os.sep来分割,推荐使用这种 os.path.split(a) # 分割最后一个元素,不管是文件还是文件夹
os.path.splitext(a) # 分割后缀名,如果无后缀名则为空
os.path.splitdive(a)# 分割盘符
os.path.dirname(a) # 返回文件夹名字
os.path.basename(a) # 放回最后一个名字(文件或文件夹)
shutil 模块
针对os在删除目录的不是很友好,引进了一个模块,进行了一个二次封装。
import shutil
os.unlink == os.remove # 删除单个文件
shutil.rmtree() # 删除整个目录,不管下面有没有文件
shutil.copy() # 拷贝文件
shutil.copytree() # 拷贝目录,os模块中没有
shutil.move() # 移动文件,
案列:
根据后缀名与大小 得出匹配的文件:
import os
import re x = re.compile('(.*pdf$)|(.*txt$)|(.*exe$)') os.chdir(r'D:\驱动人生\软件\DTLSoft')
for root, dir, files in os.walk('.'):
# root 路径, dir 该路径下的目录 , files 该路径下的文件
for i in files:
path = os.path.join(root, i)
if x.search(i) and os.stat(path).st_size > 1320:
print(os.stat(path).st_size, path)
二、文件的压缩:
还有一个tarfile,自己扩展
# 创建压缩
import zipfile
lh = zipfile.ZipFile('lh.zip', 'w') # 创建写对象
lh.write('1.py', compress_type=zipfile.ZIP_DEFLATED) # 使用某种算法,添加
lh.write('2.py', compress_type=zipfile.ZIP_DEFLATED)
lh.close() # 查看压缩
lh = zipfile.ZipFile('lh.zip', 'r')
print(lh.namelist())
print(lh.infolist()) # 查看文件中所有的文件信息
print(lh.getinfo('1.py')) # 查看文件中指定的文件信息 import shutil
shutil.copy('lh.zip', 'lh-back.zip') # 解压缩
import zipfile
lh = zipfile.ZipFile('lh.zip')
lh.extractall()
lh.close()
三、文件名模块
fnmatch 与 glob
fnmatch
fnmatch 是用来匹配文件名字的。支持一些简单的正则。
原来匹配文件名,需要自己写正则来干活,用这个模块可以简单匹配出来。
* matches everything
? matches any single character
[seq] matches any character in seq
[!seq] matches any char not in seq
import fnmatch,os
for f in os.listdir():
if fnmatch.fnmatch(f, '*.txt'):
print(f)
elif fnmatch.fnmatch(f, '*.pdf'):
print(f)
glob:
glob是fnmatch的封装。直接路径下符合的文件名,返回一个迭代器。 使用更方便:
继承fnmatch的正则
import glob
for f in glob.glob('[0-9].py'): # 当前路径
print(f) # 或
for item in glob.glob(self.source_dir+'/*.jpg'): # 自定义路径
print(item)
四、 其他一些读写模块
4.1 pickle
序列化,把一些字典,列表等序列化存储直接存储到硬盘,重新加载后就可以读取。
不支持直接对象序列化(但是可以把对象存储到列表中,再进行序列化)
方法:
dumps 与 loads
import pickle
# 存储
a = [1, 2, 3, 'a', 'b', 'c']
with open('test.pkl', 'wb') as f:
f.write(pickle.dumps(a)) # 加载
with open('test.pkl', 'rb') as f:
b = pickle.loads(f.read())
print(b)
可以更近一步,直接写入文件
import pickle
# 存储
a = [1, 2, 3, 'a', 'b', 'c']
with open('test.pkl', 'wb') as f:
pickle.dump(a, f)
# 加载
with open('test.pkl', 'rb') as f:
b = pickle.load(f)
print(b)
4.2 shelve
A "shelf" is a persistent, dictionary-like object.
用类似字典的方式储存任意的python的对象 (字典,列表也是对象,python一切都对象)
import shelve
# 存
with shelve.open('1.slv') as so:
so['louhui'] = '帮我存进去'
so['ying'] = '我也要' # 取
with shelve.open('1.slv') as sol:
print(sol['louhui'])
print(sol['ying'])
4.3 IO 虚拟文件、临时文件
当文件 不需要存盘的时候,可以使用这个。
import io
a_io = io.StringIO() # 生成一个IO.stringIo对象,open生成的也是io对象。可以调用IO的各种读写,定位方法
a_io.write('第二行代码\n')
a_io.write('第三行代码') print('我这里结束啦', file=a_io) # 利用print的file,把一些东西直接写入到这个a_io流中
# print(file=a_io) content = a_io.getvalue() # 取流
print(content) a_io.close()
os模块、文件压缩 、匹配文件后缀名:fnmatch glob的更多相关文章
- java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码
java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码 作者:Vashon package com.ywx.batchrename; import java.io.File; import ...
- time | sys | os 模块,递归删除文件,项目分析
一,复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块 ...
- 第十九章 Python os模块,pathlib 判断文件是目录还是文件
OS模块 os.path.abspath() :返回path规范化的绝对路径 import sys import os BASE_DIR = os.path.dirname(os.path.dirna ...
- JS截取后缀名,文件全名,非后缀名的方法---收藏(冷饭_)
<script language="javascript" type="text/javascript"> //取整个文件的路径并且把文件名赋给文件 ...
- c# 控制台应用程序批量修改文件夹下的后缀名(包括子文件夹)
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- 在有道词典程序文件夹发现一个后缀名为sql的数据库(SQLite)
缘起 在清理电脑磁盘的时候,看一看各安装文件夹有占用了多大容量,发现有道词典居然达140MB了,于是进去看看. 发现个有趣的文件:XXX.sql. 首先我们看一看它的安装文件夹的结构: Dict └─ ...
- BCB中选择文件对话框TOpenDialog过滤后缀名使用方法
BCB中使用TOpenDialog选择对话框时,直接OpenDialog->Execute()弹出的对话框是显示所有文件的,如果我们希望过滤指定的文件后缀名就需要在Execute()前做一些初始 ...
- OS模块中获取当前文件的绝对路径的相关方法
os.path.realpath(__file__) 作用:获取当前执行py脚本的绝对路径(在当前工作目录下的绝对路径) __file__ : 表示当前文件的本身,一般值是当前文件的相对路径 例如: ...
- python zipfile 文件压缩和文件
文件压缩 zipfile_obj = zipfile.ZipFile(zipfile_objpath, 'a', zipfile.ZIP_DEFLATED) for dirpath, dirnames ...
- linux文件压缩与文件夹压缩(打包)
目录 一:linux文件压缩 1.linux常见的压缩包有哪些? 2.bzip压缩(文件) 二:打包(文件夹压缩) 1.打包命令 2.参数 3.参数解析(实战) 4.注意事项 简介: win中的压缩包 ...
随机推荐
- java中全面的单例模式多种实现方式总结
单例模式的思想 想整理一些 java 并发相关的知识,不知道从哪开始,想起了单例模式中要考虑的线程安全,就从单例模式开始吧. 以前写过单例模式,这里再重新汇总补充整理一下,单例模式的多种实现. 单例模 ...
- 并发队列ConcurrentLinkedQueue与阻塞队列LinkedBlockingQueue的区别
1. 介绍背景 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列. Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是Block ...
- idea中 在接口中如何直接跳转到该接口的是实现类中?
例如,我想跳转到UserInfoDao 这个接口的实现类中,操作如下: 把鼠标放到这个接口UserInfoDao 上面,右键,选择 GO To ,然后选择 Implementations,就可以直接跳 ...
- oracle中length、lengthb、substr、substrb用法小结
我记得我曾经在开发form的时候犯过这样一个错误,对于form中的某个字段,对应于数据库中某张表的字段,假设在数据库中这个字段一般也就用到20个汉字的长度,后来我在开发form的时候,设置item类型 ...
- Linux查看本机登陆用户信息(w、who、last和lastlog命令)
w 命令 查看 Linux 服务器上目前已经登录的用户信息 [root@localhost ~]# w :: up :, users, load average:0.00, 0.00, 0.00 US ...
- C++之图片旋转90,再保存
下面测试代码只需要全部放在一个.cpp文件里就行 //#include "stdafx.h"#include <stdio.h>#include <string& ...
- Cisco 交换Vlan配置
添加Vlan命令 #添加vlan100 config)#vlan 100 #重命名vlan100 config-vlan)#name vlan100 #返回上一层 config-vlan)#exit ...
- Servlet3.0与Spring
servlet filter listener web.xml DispatcherServlet web.xml 后期 servlet3.0我们去除web.xml 通过注解方式 同时需要s ...
- LeetCode——Sort List
Question Sort a linked list in O(n log n) time using constant space complexity. Solution 分析,时间复杂度要求为 ...
- 【网络结构可视化】Visualizing and Understanding Convolutional Networks(ZF-Net) 论文解析
目录 0. 论文地址 1. 概述 2. 可视化结构 2.1 Unpooling 2.2 Rectification: 2.3 Filtering: 3. Feature Visualization 4 ...