Day16 包,random,shutil(压缩,解压)

01昨日内容

02

  # 函数过多,分模块文件去管理函数,模块文件过多,将模块文件分类,放在一个个文件夹中,这个文件夹就是包,使组织结构更加清晰

文件:

1,被别人使用

2,当作脚本自己使用

执行问运行时,会将执行文件的当前的目录的路径加载到sys.path

 包也是模块,他是模块的集合体,所以引用包也会发生三件事情:

# 1,创建一个以包名命名的名称空间。

# 2,执行包中的__init__文件,将__init__里面的代码块加载到以包名明命的名称空间的内存中。

# 3,调用包内的名字必须通过包名. 的方式调用。

 

# 总结:

#  from a.b import c  .的左边一定是个包,import 后面一定一个具体的名字

# 包里面的__init__ 如果想要引用模块必须是 from ....import ... 不能直接 import

# from a.b.c.d import e.f.g  错误

# from a.b.c.d import e

 

 

包的导入

# 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入

#        优点: 执行文件与被导入的模块中都可以使用

#        缺点: 所有导入都是以sys.path为起始点,导入麻烦

 

# 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入

#        符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹

#        优点: 导入更加简单

#        缺点: 只能在导入包中的模块时才能使用

 

 

03 random模块

>>> import random

#随机小数

>>> random.random()      # 大于0且小于1之间的小数

0.7664338663654585

>>> random.uniform(1,3) #大于1小于3的小数

1.6270147180533838

 

 

#随机整数

>>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数

>>> random.randrange(1,10,2) # 大于等于1且小于10之间的奇数

 

 

#随机选择一个返回

>>> random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]

#随机选择多个返回,返回的个数为函数的第二个参数

>>> random.sample([1,'23',[4,5]],2) # #列表元素任意2个组合

[[4, 5], '23']

 

 

#打乱列表顺序

>>> item=[1,3,5,7,9]

>>> random.shuffle(item) # 打乱次序

>>> item

[5, 1, 3, 7, 9]

>>> random.shuffle(item)

>>> item

[5, 9, 7, 1, 3]

 

 

 

04shutil

 

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

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

 

 

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

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

shutil.copyfile(src, dst)

 

 

拷贝文件

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

shutil.copymode(src, dst)

 

 

仅拷贝权限。内容、组、用户均不变

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

shutil.copystat(src, dst)

 

仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

1 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,...)

创建压缩包并返回文件路径,例如:ziptar

创建压缩包并返回文件路径,例如:ziptar

 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 两个模块来进行的,详细:

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

 

 

zipfile压缩解压缩

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

 

posted @ 2019-01-10 14:54  addit  Views(85)  Comments(0)    收藏  举报