shutil模块

主要用于文件复制相关内容,文件夹归档操作。

  • copy()复制文件
1
2
3
4
5
6
7
8
格式:copy(src, dst),返回值:目标文件地址
参数:src 文件来源路径,dst 文件目标路径

#导入模块
import shutil
#copy()
result = shutil.copy('C:\\Users\\xdl\\Desktop\\demo.txt','C:\\test')
print(result)
  • copy2()

复制文件,保留原有文件的信息(操作时间和权限等)

1
2
3
4
5
格式:copy2(src, dst),返回值:目标文件地址
参数:src 文件来源路径,dst 文件目标路径

result = shutil.copy2('C:\\Users\\xdl\\Desktop\\demo.txt','C:\\test')
print(result)
  • copyfile()

复制文件内容(打开文件值之后读取内容 ,在新建文件复制进去)

1
2
3
4
5
格式:copyfile(src,dst),返回值:目标文件地址
参数:src 文件来源路径,dst 文件目标路径

result = shutil.copyfile('C:\\Users\\xdl\\Desktop\\demo.txt','C:\\test\\mydemo.txt')
print(result)
  • copyfileobj()

复制文件内容,灵活性更高,可以决定复制文件的方式

1
2
3
4
5
6
7
8
格式:copyfileobj(fsrc,fdst),返回值:None
参数:fsrc 打开为来源文件指针,fdst 打开目标文件的指针

fsrc = open('C:\\Users\\xdl\\Desktop\\demo.txt','r')
#新建并且打开目标文件
fdst = open('c:\\test\\yourdemo.txt','a')
result = shutil.copyfileobj(fsrc,fdst)
print(result)
  • copystat() 拷贝文件状态信息
1
2
3
4
5
格式:copystat(src,dst),返回值:None
参数:src 文件来源路径,dst 文件目标路径

result = shutil.copystat('C:\\Users\\xdl\\Desktop\\demo.txt','c:\\test\\yourdemo.txt')
print(result)
  • copymode() 拷贝文件权限(尽量在linux下操作)
1
2
3
4
5
格式:copymode(src,dst),返回值:None
参数:src 文件来源路径,dst 文件目标路径

result = shutil.copymode('C:\\Users\\xdl\\Desktop\\demo.txt','c:\\test\\yourdemo.txt')
print(result)
  • copytree() 拷贝整个文件夹
1
2
3
4
5
格式:copytree(src,dst),返回值:目标地址路径
参数:src 来源文件夹,dst 目标文件夹

result = shutil.copytree('C:\\Users\\xdl\\PycharmProjects\\python_05','C:\\Users\\xdl\\Desktop\\python_05')
print(result)
  • rmtree() 删除整个文件夹
1
2
3
4
5
格式:rmtree(path),返回值:None
参数:path 要删除的文件夹路径

result = shutil.rmtree('C:\\Users\\xdl\\Desktop\\python_05')
print(result)
  • move()

移动文件或者文件夹/剪切操作(修改文件和文件夹名称也可以使用该函数!)

1
2
3
4
5
6
7
8
格式:move(src,dst),返回值:目标路径
参数:src 来源路径,dst 目标路径

result = shutil.move('C:\\Users\\xdl\\Desktop\\demo.txt','C:\\test')
result = shutil.move('C:\\test2','C:\\test')
print(result)

shutil.move('C:\\test','C:\\test_demo')
  • chown()更改文件的所有者

  • which()查找命令文件所在的路径

1
2
3
4
格式:which(命令名称)

result = shutil.which('calc')
print(result)
  • disk_usage()查看磁盘使用量
1
2
3
4
格式:disk_usage('盘符')

result = shutil.disk_usage('c:')
print(result)

归档操作

1
2
3
4
5
6
7
8
归档:将一个【文件夹】中的所有内容转换成一个文件(压缩文件)。主要是用于方便文件的转移或者发送
归档的反操作:解包

格式:make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None)
参数:base_name 当前需要创建的归档文件的路径和名称(没有文件后缀部分)
format 设置归档文件的后缀(zip和tar)
root_dir 设置需要归档的文件夹根目录
返回值:归档文件的路径
1
2
3
4
5
6
7
8
9
10
11
12
13
result = shutil.make_archive('C:\\Users\\xdl\\Desktop\\gd','zip','C:\\test_demo')
print(result)

#查看归档支持的格式
result = shutil.get_archive_formats()
print(result)

[(文件格式名称,介绍)
('bztar', "bzip2'ed tar-file"),
('gztar', "gzip'ed tar-file"),
('tar', 'uncompressed tar file'),
('xztar', "xz'ed tar-file"),
('zip', 'ZIP file')]

解包操作

1
2
3
4
5
6
7
压缩:将【多个文件】使用或者不使用压缩算法,添加到一个压缩文件中的操作。
压缩的反操作:解压缩

格式:unpack_archive(filename, extract_dir=None, format=None)
参数:filename 归档文件的路径
extract_dir 解包的路径 默认当前文件夹
返回值:None
1
2
3
4
5
6
7
8
9
10
11
12
13
result = shutil.unpack_archive('C:\\Users\\xdl\\Desktop\gd.zip','C:\\Users\\xdl\\Desktop')
print(result)

#查看解包支持的格式
result = shutil.get_unpack_formats()
print(result)

[(格式类型名称,对应的文件后缀,说明信息哦)
('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"),
('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"),
('tar', ['.tar'], 'uncompressed tar file'),
('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"),
('zip', ['.zip'], 'ZIP file')]
1
2
3
4
5
linesep  获取系统的换行符号
window \r\n
linux \n
macos 10.9 ->\r 10.10->\n
print(repr(os.linesep))

zip压缩

  • 压缩操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import zipfile

#打开或者创建zip文件的路径
#打开的模式 r w a 使用的压缩方法zipfile.ZIP_DEFLATED对文件进行压缩,zipfile.ZIP_STORED 默认值不进行压缩,只是存储模式。
zp = zipfile.ZipFile('C:\\Users\\xdl\\Desktop\\py04.zip','w',zipfile.ZIP_DEFLATED)

#向压缩文件中添加内容(文件或者目录),但内容并未压缩
zp.write('D:\\FeiQ.exe','fq.exe')
zp.write('D:\\format.pdf','fm.pdf')
zp.write('D:\\jsq.py','mycalc\\jsq.py')
# 源文件地址 压缩后的文件名

#关闭zip文件
zp.close()
  • 解压操作
1
2
3
4
5
6
7
8
9
10
11
12
13
#打开压缩zip文件
zp = zipfile.ZipFile('C:\\Users\\xdl\\Desktop\\py04.zip','r')

#解压所有文件
#zp.extractall('D:\\test')
#解压指定文件 文件夹名 压缩的文件名用/表示下一级文件
zp.extractall('D:\\test',['mycalc/jsq.py','fm.pdf'])#注意路径

#解压一个文件
#zp.extract('fq.exe','D:\\test')

#关闭压缩文件
zp.close()

tar压缩

  • 压缩操作
1
2
3
4
5
6
7
8
9
10
11
import tarfile
#打开或者创建压缩文件
tp = tarfile.open('C:\\Users\\xdl\\Desktop\\py04.tar','w:bz2')

#添加文件
tp.add('D:\\FeiQ.exe','fq.exe')
tp.add('D:\\format.pdf','fm.pdf')
tp.add('D:\\jsq.py','calc\\jsq1.py')

#关闭压缩文件
tp.close()
  • 解压软件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#打开压缩软件
tp = tarfile.open('C:\\Users\\xdl\\Desktop\\py04.tar','r')

#解压所有文件操作
tp.extractall('C:\\Users\\xdl\\Desktop\\py04')
#解压单个文件
tp.extract('fq.exe','C:\\Users\\xdl\\Desktop')

#获取解压列表(解压指定列表)
#获取所有文件列表,分片获取指定解压文件即可
lists = tp.getmembers()
#print(lists)
tp.extractall('C:\\Users\\xdl\\Desktop\\py04',lists[0:2])

#关闭解压软件
tp.close()