发布时间:2018-03-02 11:35:52编辑:admin阅读(3701)
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容
test.txt是一个已经存在的文件,复制一份到test1.txt
import shutil with open("test.txt",'r',encoding="utf-8") as f1,\ open("test1.txt",'w',encoding="utf-8") as f2: shutil.copyfileobj(f1,f2)
执行程序,查看test1文件内容是否完整
shutil.copyfile(src, dst)
拷贝文件
shutil.copyfile("test.txt","test1.txt")
执行程序,查看test1文件内容是否完整
和copyfileobj是类似的功能,不同的是,copyfile不需要打开文件,底层做好了。
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
注意:不拷贝文件!
import shutil,os shutil.copymode("test.txt","test1.txt") #查看文件st_mode print(os.stat("test.txt")[0]) print(os.stat("test1.txt")[0])
执行输出
33206
33206
shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags
注意:不拷贝文件!
shutil.copystat("test.txt","test1.txt")
执行输出
import shutil,os shutil.copystat("test.txt","test1.txt") #查看文件st_mode print(os.stat("test.txt")) print(os.stat("test1.txt"))
os.stat_result(st_mode=33206, st_ino=29554872554620097, st_dev=2155337657, st_nlink=1, st_uid=0, st_gid=0, st_size=20, st_atime=1519956939, st_mtime=1519956939, st_ctime=1519956939)
os.stat_result(st_mode=33206, st_ino=8444249301319863, st_dev=2155337657, st_nlink=1, st_uid=0, st_gid=0, st_size=20, st_atime=1519956939, st_mtime=1519956939, st_ctime=1519956793)
可以发现st_mode,st_atime,st_mtime是一致的
shutil.copy(src, dst)
拷贝文件和权限
import shutil,os shutil.copy("test.txt","test1.txt")
shutil.copy2(src, dst)
拷贝文件和状态信息
import shutil,os shutil.copy2("test.txt","test1.txt")
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件
例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
原文件夹目录结构如下:
test4 ├── a │ └── b │ └── c │ └── __init__.py ├── module_test.py ├── test.py └── test.txt
在test4同级目录,创建文件copy_test.py
import shutil shutil.copytree("test4","new_test")
执行copy_test.py,查看new_test目录
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
import shutil shutil.rmtree("new_test")
执行程序,发现new_test文件被删除了
shutil.move(src, dst)
递归的去移动文件
import shutil shutil.move("test.txt",r"a\b\c")
执行程序,发现test.txt被移动到c文件夹了
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对象
将test4目录打包成archive_test.zip文件
import shutil shutil.make_archive("archive_test","zip",r"E:\python_script\day5\test4")
执行程序,查看archive_test.zip文件的内容
注意:执行的程序代码不要在压缩路径里面,否则会多压一次。
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() z.close()
tarfile 压缩解压
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()
上一篇: python sys模块
下一篇: python shelve模块
47745
46237
37110
34627
29229
25886
24745
19863
19417
17909
5716°
6315°
5836°
5888°
6985°
5829°
5846°
6361°
6316°
7673°