关于设计模式(二)
(还包含模块和包的知识内容)
读取图片文件,实现文件的拷贝
with open('图片名','rb') as f: #b是指二进制
with open('新建文件名','wb') as w:
for line in f.readlines():
w.write(line)
print(’图片拷贝完成‘)
pickle序列化与反序列化
pickle.dump(obj,file) obj就是要被序列化的对象,file指的是存储的文件
pickle.load(file) 从file读取数据 反序列化成对象
import pickle
with open(r"d:\data.dat","wb") as f:
a1="jiaqi"
a2=234
a3=[20,30,40]
#将对象序列化到文件中
pickle.dump(a1,f)
pickle.dump(a2,f)
pickle.dump(a3,f)
#将获得的数据反序列化成对象
import pickle
with open(r"d:\data.dat","rb") as f:
a1=pickle.load(f)
a2=pickle.load(f)
a3=pickle.load(f)
print(a1)
print(a2)
print(a3)
CSV文件的操作
CSV文件中:
值没有类型,所有值都是字符串
不能指定单元格的宽高,不能合并单元格
不能指定字体颜色等样式
没有多个工作表
不能嵌入图像图表
#CSV文件的读取和写入
import csv
with open("dd.csv","r") as f: #dd为文件名
a_csv = csv.reader(f)
for row in a_csv: #遍历文件里的内容
print(row) #读取
with open("ee.csv","r") as f: #ee为文件名
b_csv = csv.writer(f)
b_csv.writerow(["ID","姓名","年龄"])
b_csv.writerow(["1001","jiajia","18"])
c = [["1002","dfg","19"],["1003","fhj","20"]]
b_csv.writerows(c) #写入
os和os.path模块
os模块可以帮助我们直接对操作系统进行操作,我们可以直接调用操作系统的可执行文件、命令,
直接操作文件、目录等等
os.system可以帮助我们直接调用系统命令
os.system调用windows系统的记事本程序
import os
os.system("notepad.exe")
os.system调用windows系统中ping命令
import os
os.system("ping www.baidu.com")
#GBK
正在 Ping www.a.shifen.com [36.152.44.95] 具有 32 字节的数据:
来自 36.152.44.95 的回复: 字节=32 时间=35ms TTL=54
来自 36.152.44.95 的回复: 字节=32 时间=24ms TTL=54
来自 36.152.44.95 的回复: 字节=32 时间=26ms TTL=54
来自 36.152.44.95 的回复: 字节=32 时间=21ms TTL=54
36.152.44.95 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 21ms,最长 = 35ms,平均 = 26ms
OS模块下常用操作文件的方法
remove(path) | 删除指定的文件 |
rename(str.dest) | 重命名文件或者目录 |
stat(path) | 返回文件的所有属性 |
listdir(path) | 返回path目录下的文件和目录列表 |
mkdir(path) | 创建目录 |
makedirs(path1/path2/path3/...) | 创建多级目录 |
madir(path) | 删除目录 |
removedirs(path1/path2/path3/...) | 删除多级目录 |
getcwd() | 返回当前工作目录:current work dir |
chdir(path) | 把path设为当前工作目录 |
walk() | 遍历目录树 |
sep | 当前操作系统所使用的路径分隔符 |
os.path模块
isabs(path) | 判断path是否为绝对路径 |
isdir(path) | 判断path是否为目录 |
isfile(path) | 判断path是否为文件 |
exists(path) | 判断指定路径的文件是否存在 |
getsize(filename) | 返回文件的大小 |
abspath(path) | 返回绝对路径 |
dirname(p) | 返回目录的路径 |
getatime(filename) | 返回文件的最后访问时间 |
getmtime(filename) | 返回文件的最后修改时间 |
walk(top,func,arg) | 递归方式遍历目录 |
join(path,*paths) | 连接多个path |
split(path) | 对路径进行分割 |
splitext(path) | 从路径中分割文件的扩展名 |
import os
import os.path #from os import path
print(os.path.isabs("文件名"))
path = os.path.abspath("")
print(os.path.split(path))
walk()递归遍历所有文件和目录
os.walk()方法:
返回一个三个元素的元组,(dirpath,dirnames,filenames)
dirpath: 要列出指定目录的路径
dirnames:目录下的所有文件夹
filenames:目录下的所有文件
import os
path = os.getcwd()
list_ifles = os.walk(path)
for dirpath,dirnames,filenames in list_files:
for dir in dirnames:
print(dir)
for file in filenames:
print(file)
import os
all_files = []
path = os.getcwd()
list_ifles = os.walk(path)
for dirpath,dirnames,filenames in list_files:
for dir in dirnames:
all_files.append(os.path.join(dirpath,dir))
for file in filenames:
all_files.append(os.path.join(dirpath,file))
#打印所有的子目录的文件
for file in all_files:
print(files)
shutil模块(拷贝和压缩)
import shutil
shutil.copytree("被拷贝的文件","新建的文件")(新建文件需要原来不存在)
shutil.copytree("","",ignaore=shutil.ignore_patterns("*.txt","*.html")) 此时新建文件可以是原来存在的
#压缩、解压缩
shuttil.make_archive("","","") 第二个为压缩格式,例如zip
第三个为被压缩文件
第一个为压缩后的地址
#未使用shutil时的压缩方法
z1=zipfile.ZipFile("压缩后的地址","w")
z1.write("被压缩的文件")
z1.close()
z2=zipfile.ZipFile("需解压的文件","r")
z2.extractall("解压到的目录")
z2.close()
模块的导入
import 模块名
模块的四个通用类别:
1、使用Python编写的代码(.py文件)
2、已经被编译为共享库或DLL的c或c++扩展
3、包好一组模块的包
4、使用c编写并连接到Python解释器的内置模块
from...import导入模块中的成员(函数或者类)
包的导入
1、import a.aa.module_AA
在使用时必须加完整名称来引用,比如:a.aa.module_AA.fun_AA()
2、from a.aa import module_AA
在使用时,可以直接使用模块名。比如:module_AA.fun_AA()
3、from a.aa.module_AA import fun_AA 直接导入函数
在使用时,直接可以使用函数名,比如fun_AA()
注:
1、from package import item 这种语法中,item可以是包、模块,也可以是函数、类、变量
2、import item1.item2 这种语法中,item必须是包或模块,不能是其他
__init__.py的三个核心作用:
1、作为包的标识,不能删除
2、用来实现模糊导入
3、导入包实质是执行__init__.py文件,可以在__init__.py文件中做这个包的初始化。
以及需要统一执行代码