常用模块

本文详细介绍了Python中shutil模块的各种文件操作方法,包括文件复制、权限复制、状态信息复制、目录复制及删除等功能,并展示了如何使用shelve模块实现简单的数据持久化。

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()
tarfile解压缩

 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"))#会出错,因为在序列化的时候,函数和类只序列化了名字,当加载时会在当前程序中执行(因为在当前程序中
#找不到此函数或类 )
#当在当前程序中定义了序列化时的同名的函数或类名时会加载当前的,也可以进行修改

 

转载于:https://www.cnblogs.com/plc-python/p/6497588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值