shutil 模块
import shutil # f = open("example.log") # f2 = open("example_new.log","w") # shutil.copyfileobj(f,f2)#把一个文件的内容拷贝到另一个文件内(f,f2都是文件对象) #无需打开文件直接拷贝 # shutil.copyfile("example.log","example_new2.log")#直接拷贝example.log,拷贝到example_new2.log # shutil.copymode("example.log","example_new2.log")#只拷贝权限,example_new2.log事先必须存在,只拷贝example.log的权限 # shutil.copystat("example.log","example_new2.log")#拷贝文件的状态信息(访问时间、创建时间等) # shutil.copy("example.log","example_new2.log")#即拷贝内容又拷贝权限,拷贝内容到example_new2.log可以事先不存在 # #其实是调用的shutil.copyfile,shutil.copymode这两个 # shutil.copy2("example.log","example_new2.log")#即拷贝内容又拷贝状态信息,等同于同时调用shutil.copyfile,shutil.copystat # shutil.copytree("C:\\Users\panglc\PycharmProjects\day1\db1","C:\\Users\panglc\PycharmProjects\day1\Test", # ignore=shutil.ignore_patterns("abc","*.py")) #把C:\\Users\panglc\PycharmProjects\day1\db1下的文件拷贝到"C:\\Users\panglc\PycharmProjects\day1\Test"目录下,Test #目录不存在直接创建,并通过shutil.ignore_patterns过滤掉abc目录和以.py结尾的文件 # shutil.rmtree("C:\\Users\panglc\PycharmProjects\day1\Test")#删除目录下的文件并且会删除Test目录
创建压缩
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
shutil.make_archive("day5","zip","C:\\Users\panglc\PycharmProjects\day1\day5")#把day5目录压缩到当前目录下
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
import zipfile#只能瞎说文件,可以把不同目录下的文件压缩成一个文件 z = zipfile.ZipFile("ziptest2.zip","w") # z.write("C:\\Users\panglc\PycharmProjects\day1\db1\emp")#db1目录下的文件,只能压缩文件 z.write("example.log")#当前目录下的文件 z.close() #这样压缩出来的文件会包含emp文件的所有路径 z.write("C:\\Users\panglc\PycharmProjects\day1\db1\emp",arcname="emp")#这样就只有文件名而不会包含路径了 # 解压文件 z = zipfile.ZipFile("ziptest2.zip","r") z.extract("emp")#可以只解压出其中一个指定的文件到当前目录 # z.extractall()#解压到当前目录 # z.extractall(path="c:\\zip")#也可以解压到指定的目录下,zip目录不存在直接创建 # z.extractall(members=["access.log1","access.log2"])#可以解压出指定的部分文件


import tarfile # 压缩 tar = tarfile.open('your.tar','w') tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip') tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip') tar.close() # 解压 tar = tarfile.open('your.tar','r') tar.extractall() # 可设置解压地址 tar.close()
shelve 模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
序列化
#shelve 模块也是持久化,是对pickle模块的上层封装,比 pickle用起来简单 import shelve d = shelve.open('shelve_test') # 打开一个文件 class Test(object): def __init__(self, n): self.n = n t = Test(123) t2 = Test(123334) def func(): print("haha") name = ["alex", "rain", "test"] d["test"] = name # 持久化列表 d["t1"] = t # 持久化类 d["t2"] = t2 d.close()
加载时
import shelve s = shelve.open("shelve_test") for i in s.keys(): print(i) print(s.get("test")) #print(s.get("t1"))#会出错,因为在序列化的时候,函数和类只序列化了名字,当加载时会在当前程序中执行(因为在当前程序中 #找不到此函数或类 ) #当在当前程序中定义了序列化时的同名的函数或类名时会加载当前的,也可以进行修改