第四章 6 shutil模块 序列化模块 和序列化json模块 pickle模块 shelve模块

#
# 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()

猜你喜欢

转载自blog.csdn.net/qq_42936973/article/details/82178216
今日推荐