#
# import shutil
#
# f1='sheve_test.py'
#
# f1= open('sheve_test.py','r')
#
# f2=open('sheve_test_new.py','w')
#
# shutil.move('package1','p3')
#
# shutil.make_archive('/tmp/p3','zip','p3',owner='root')
#
import zipfile
z=zipfile.ZipFile('test.zip','w')
z.write('mysql.log')
z.write('re模块.py')
z.write('p3')
z.close()
shutil模块
shutill模块是,高级的文件、文件夹、压缩包处理模块。
shutil.copyfileobj(原文件,目标文件),copy文件内容
import shutil
f_1 = open(‘info’, encoding=’utf-8’)
f_2 = open(‘info2’, ‘w’, encoding=’utf-8’)
shutil.copyfileobj(f_1, f_2)
shutil.copyfile(原文件,目标文件),copy文件内容,比shutil.copyfileobj()更简洁
import shutil
shutil.copyfile(‘info’, ‘info3’)
shutil.copymode(源文件,目标文件),仅copy权限。内容、组、用户均不变。
shutil.copystat(源文件,目标文件),copy所有状态信息,包括:mode bits,atime最后访问时间,mtime最后修改时间,flags,不会复制文件
shutil.copy(源文件,目标文件),copy文件或目录和权限
shutil.copy2(源文件,目标文件),copy文件或目录和最后访问时间与修改时间
shutil.copytree(源文件,目标文件),递归地copy文件,包含目录
shutil.rmtree(需要删除的文件),递归的删除文件
shutil.move(原文件,目标位置),递归的移动文件
shutil.make_archive(base_name, format,…)创建压缩包并返回文件路径,ep:zip;tar
base_name: 压缩包的文件名,也可以使压缩包的路径。如果只是文件名时,则保存至当前目录,不然就保存到指定路径。
www —> 保存至当前路径
/users/tools/www —> 保存至/users/tools/
format: 压缩包种类: zip(压缩打包), tar(只打包),bztar(压缩打包),gztar(压缩打包)[bzip压缩比要比gz要高5%左右,效果更好。但是另一方面,对同一个文件压缩,bzip压缩占用了更多的cpu和时间]
root_dir: 要压缩的文件夹路径(默认是当前目录)
owner: 用户,默认是当前用户
group:组,默认是当前组
logger:用于记录日志,通常是logging.logger对象
import shutil
shutil.make_archive(‘c://001//test’, ‘zip’, root_dir=’C://360驱动大师目录//’)
shutil.make_archive其实是调用ZipFile和TarFile两个模块来进行。
import zipfile
压缩文件,用zipfile模块可以实现单个文件压缩
z = zipfile.ZipFile(‘test.zip’, ‘w’)
z.write(‘info’)
z.write(‘info2’)
z.close()
解压文件
e = zipfile.ZipFile(‘test.zip’, ‘r’)
e.extractall()
e.close()
序列化模块
序列化是把内存里的数据类型转化成字符串,序列化
把字符串转成内存数据类型 叫反序列化
data = {
'roles': [
{'role': 'monster', 'type': 'pig', 'life': 50},
{'role': 'hero', 'type': 'guanyu', 'life': 80},
]
}
f = open('game_status', 'w')
f.write(str(data))
f.close()
f = open('game_status','r')
d =f.read()
d= eval(d)
print(d['roles'])
f.close()
序列化json模块
import json
data = {
'roles': [
{'role': 'monster', 'type': 'pig', 'life': 50},
{'role': 'hero', 'type': 'guanyu', 'life': 80},
]
}
# d=json.dumps(data) #dump 直接存到文件
# print(d,type(d))
f=open('test.json','w')
json.dump(data,f)
d = json.dumps(data) #仅转成字符串
d2 = json.loads(d)
print(d2['roles'])
f = open('test.json','r')
d=json.load(f)
print(d['roles'])
只是把数据类型转成字符串存到内存里的意义
json.dumps json.loads (一次)
1.把内存数据 通过网络 共享给远程其他人 (必须是bytes)
2 定义了不同语言之间的交互规则
1 纯文本 坏处 不能共享复杂的数据类型
2 xml 坏处 占空间大
3 jsaon 好处 简单 可读性好
18:33 29403 iPhone 5000
18:44 29830 iPhone 5000
pickle模块
import pickle
d={'name':'alex','age':22}
l={1,2,3,4,'rain'}
pk = open('data.pkl','wb')
pickle.dump(d,pk)
f=open('data.pkl','rb')
d=pickle.load(f)
print(d)
json 和pickle 优缺点
json
str int tuple list dict
pickle
支持python里所有的数据类型
只能在python里使用
import pickle
def sayhi(name):
print('ddd',name)
pickle.dumps(sayhi('jj'))
sheve模块详解
shelve 是对pickle 进行的分装
import shelve
f=shelve.open('shelve_txt.db')
names = ['alex','rain','test']
info = {'name':'alex','rian':'r'}
f['names'] = names
f['info_dic'] = info
f.close()
f= shelve.open('shelve_txt.db')
print(f.get('names'))
f['names'] = ['alex','jack','test']
print(f.get('names'))
f.close()