码迷,mamicode.com
首页 > 其他好文 > 详细

第四章——续

时间:2018-09-04 00:15:55      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:int   log   数据   初始化   mat   序列化   系统   解压缩   处理   

4.5      sys模块

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称
sys.stdout.write(please:)  #标准输出 , 引出进度条的例子, 注,在py3上不行,可以用print代替
val = sys.stdin.readline()[:-1] #标准输入
sys.getrecursionlimit() #获取最大递归层数
sys.setrecursionlimit(1200) #设置最大递归层数
sys.getdefaultencoding()  #获取解释器默认编码
sys.getfilesystemencoding  #获取内存数据存到文件里的默认编码

4.6    shutil模块

shutil模块

高级的文件、文件夹、压缩包处理模块

shutil.copyfileobj(fsrc,fdst[,length])

将文件内容拷贝到另一个文件中

import shutil
shutil.copyfileobj(open(old.xml,r), open(new.xml, w))

shutil.copyfile(src,dst)

拷贝文件

shutil.copyfile(f1.log, f2.log) #目标文件无需存在

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

shutil.copymode(f1.log, f2.log) #目标文件必须存在

shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copystat(f1.log, f2.log) #目标文件必须存在

shutil.copy(src, dst)
拷贝文件和权限

import shutil
shutil.copy(f1.log, f2.log)

shutil.copy2(src, dst)
拷贝文件和状态信息

import shutil
shutil.copy2(f1.log, f2.log)

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹

import shutil
shutil.copytree(folder1, folder2, ignore=shutil.ignore_patterns(*.pyc, tmp*)) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除

shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

import shutil
shutil.rmtree(folder1)

shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。

import shutil
shutil.move(folder1, folder3)

shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar

  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

如 data_bak =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/

    • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    • root_dir: 要压缩的文件夹路径(默认当前目录)
    • owner: 用户,默认当前用户
    • group: 组,默认当前组
    • logger: 用于记录日志,通常是logging.Logger对象
#将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", gztar, root_dir=/data)

#将 /data下的文件打包放置 /tmp/目录
import shutil
ret = shutil.make_archive("/tmp/data_bak", gztar, root_dir=/data)

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
zipfile压缩&解压缩

import zipfile

# 压缩
z = zipfile.ZipFile(laxi.zip, w)
z.write(a.log)
z.write(data.data)
z.close()

# 解压
z = zipfile.ZipFile(laxi.zip, r)
z.extractall(path=.)
z.close()

tarfile压缩&解压缩

import tarfile

# 压缩
>>> t=tarfile.open(/tmp/egon.tar,w)
>>> t.add(/test1/a.py,arcname=a.bak)
>>> t.add(/test1/b.py,arcname=b.bak)
>>> t.close()

# 解压
>>> t=tarfile.open(/tmp/egon.tar,r)
>>> t.extractall(/egon)
>>> t.close()

4.7       json&pickle

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

import pickle
data = {k1:123,k2:Hello}

# pickle.dumps 将数据通过特殊的形式转换位只有python语言认识的字符串
p_str = pickle.dumps(data)
print(p_str)

#pickle.dump 将数据通过特殊的形式转换位只有python语言认识的字符串,并写入文件
with open(D:/result.pk,wb,encoding=utf8) as fp:
    pickle.dump(data,fp)

import json
# json.dumps 将数据通过特殊的形式转换位所有程序语言都认识的字符串
j_str = json.dumps(data)
print(j_str)

#pickle.dump 将数据通过特殊的形式转换位只有python语言认识的字符串,并写入文件
with open(D:/result.json,wb,encoding=utf8) as fp:
    json.dump(data,fp)

json vs pickle:

JSON:

优点:跨语言、体积小

缺点:只能支持int\str\list\tuple\dict

Pickle:

优点:专为python设计,支持python所有的数据类型

缺点:只能在python中使用,存储数据占空间大

4.8   shelve 

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

序列化:

import shelve

f = shelve.open(shelve_test)  # 打开一个文件



names = ["alex", "rain", "test"]
info = {name:alex,age:22}


f["names"] = names  # 持久化列表
f[info_dic] = info

f.close()

反序列化:

import shelve

d = shelve.open(shelve_test)  # 打开一个文件

print(d[names])
print(d[info_dic])


#del d[‘test‘] #还可以删除

 

第四章——续

标签:int   log   数据   初始化   mat   序列化   系统   解压缩   处理   

原文地址:https://www.cnblogs.com/cnlogs1/p/9581766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!