文件处理的高阶用法
拷贝文件、删除文件、拷贝目录、删除目录、可以带权限、压缩、归档
import shutil # 将文件内容拷贝到另一个文件中,可以部分内容 f1_p = 'shave_test.py' f2_p = 'shave_test_new.py' f1 = open(f1_p, 'r') f2 = open(f2_p, 'w') shutil.copyfileobj(f1, f2, length=5) # 每次读多少直接读完 #不用打开直接拷贝文件 f3_p = 'shave_test.py' f4_p = 'shave_test_new.py' shutil.copyfile(f3_p, f4_p) #仅拷贝权限。内容、组、用户均不变 f5_p = 'shave_test.py' f6_p = 'shave_test_new.py' shutil.copymode(f5_p, f6_p) #拷贝状态的信息,包括:mode bits, atime, mtime, flags f7_p = 'shave_test.py' f8_p = 'shave_test_new.py' shutil.copymode(f7_p, f6_8) # 拷贝文件和权限 src = 'shave_test.py' dst = 'shave_test_new.py' shutil.copy(src, dst) #递归的去拷贝文件 src = 'packages' dst = 'package2' # shutil.copytree(src, dst, symlinks=False, ignore=None) #ignore 可以忽略调某些文件 shutil.copytree(src, dst, symlinks=False, ignore=shutil.ignore_patterns('__init__.py')) #递归的去删除文件 pth = 'package3' shutil.rmtree(pth) #递归的去移动文件 src = 'package4' dst = 'package' shutil.move(src, dst) # 类似文件剪切,源路径不存在则报错 #创建压缩包并返回文件路径,例如:zip、tar # 如:abc =>保存至当前路径 # 如:/Users/123/abc =>保存至/Users/123/ # format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar” # root_dir: 要压缩的文件夹路径(默认当前目录) # owner: 用户,默认当前用户 # group: 组,默认当前组 # logger: 用于记录日志,通常是logging.Logger对象 base_name = 'abc' shutil.make_archive(base_name, 'zip', 'proj') # 把proj文件压缩为abc.zip压缩包 import zipfile # 压缩 z = zipfile.ZipFile('proj.zip', 'w') z.write('__init__.py') z.write('manage.py') z.close() # 解压 z = zipfile.ZipFile('proj.zip', 'r') z.extractall('proj2') # 设置解压路径 z.close() import tarfile # # 压缩(可递归式压缩) tar = tarfile.open('your.tar', 'w') tar.add("/Users/Administrator/OneDrive/python/python_21/第4课/proj") # 递归式压缩,前面路径都生成了 # tar.add("/Users/Administrator/OneDrive/python/python_21/第4课/proj", arcname='proj1.zip') #只生成proj1.zip文件夹 tar.add("/Users/Administrator/OneDrive/python/python_21/第4课/manage.py", arcname='manage.zip') # tar.close() # 解压 tar = tarfile.open('your.tar', 'r') tar.extractall('test2') # 可设置解压地址 tar.close()