前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件和目录操作(一)、shutil模块

文件和目录操作(一)、shutil模块

作者头像
狼啸风云
修改2022-09-03 22:20:57
3.7K0
修改2022-09-03 22:20:57
举报
文章被收录于专栏:计算机视觉理论及其实现
  1. shutil.copyfile( src, dst) #从源src复制到dst中去。 如果当前的dst已存在的话就会被覆盖掉
  2. shutil.move( src, dst) #移动文件或重命名
  3. shutil.copymode( src, dst) #只是会复制其权限其他的东西是不会被复制的
  4. shutil.copystat( src, dst) #复制权限、最后访问时间、最后修改时间
  5. shutil.copy( src, dst) #复制一个文件到一个文件或一个目录
  6. shutil.copy2( src, dst) #在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
  7. shutil.copy2( src, dst) #如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
  8. shutil.copytree( olddir, newdir, True/Flase) #把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
  9. shutil.rmtree( src ) #递归删除一个目录以及目录内的所有内容

os模块不仅提供了新建文件、删除文件、查看文件属性的操作功能,还提供了对文件路径的操作功能。但是,对于移动、复制、打包、压缩、解压文件及文件夹等操作,os模块没有提供相关的函数,此时需要用到shutil模块。shutil模块是对os模块中文件操作的补充,是Python自带的关于文件、文件夹、压缩文件的高层次的操作工具,类似于高级API。

1、移动文件或文件夹

使用shutil.move函数可以将指定的文件或文件夹移动到目标路径下,返回值是移动后的文件绝对路径字符串。

代码语言:javascript
复制
import shutil

shutil.move('D:\\test\\a\dog.txt', 'D:\\test\\b')

如果目标路径指向的文件夹中已经存在了同名文件,那么该文件将被重写;如果目标路径指向一个具体的文件,那么指定的文件在移动后将被重命名。

注意:目标路径下的文件夹必须是已经存在的,否则程序会返回错误。

2、复制文件

shutil.copyfile(src,dst)可以从src文件复制内容(不包含元数据)到dst文件。dst必须是完整的目标文件名,返回值是复制后的文件绝对路径字符串。

代码语言:javascript
复制
import shutil

shutil.copyfile('D:\\test\\a\dog2.txt', 'D:\\test\\b\dog1.txt')

如果src和dst是同一文件,就会引发错误shutil.Error。dst文件必须是可写的,否则将引发异常IOError。如果dst文件已经存在,则它会被替换。对于特殊文件,例如字符或块设备文件和管道不能使用此功能,因为copyfile会打开并读取文件。

shutil.copy(src,dst)可以复制文件src到文件或目录dst。如果dst是目录,则会使用src相同的文件名创建(或覆盖),文件权限也会复制,返回值是复制后的文件绝对路径字符串。

代码语言:javascript
复制
import shutil

shutil.copy('C:\\Users\\45543\\Desktop\\pi_digits.txt', 'C:\\Users\\45543\\MyFile.txt')

'C:\\Users\\45543 \\MyFile.txt'

shutil模块还提供了shutil.copytree函数用于进行目录的复制。

代码语言:javascript
复制
import shutil

shutil.copytree('D:\\test\\a','D:\\test\c')

注意:test文件中不存在c。

3、永久删除文件和文件夹

使用os.unlink函数会删除指定的文件;

使用os.rmdir函数会删除路径指定的文件夹,但是这个文件夹必须是空的,不能包含任何文件或子文件夹;

使用shutil.rmtree函数可以删除路径指定的文件夹,并且这个文件夹里面的所有文件和子文件夹都会被删除。

因为涉及对文件与文件夹的永久删除,因此以上函数的使用必须要非常谨慎。

代码语言:javascript
复制
import shutil

import os

os.unlink('D:\\test\c')


Traceback (most recent call last):
  File "D:/test/test.py", line 5, in <module>
    os.unlink('D:\\test')
PermissionError: [WinError 5] 拒绝访问。: 'D:\\test'



os.rmdir('D:\\test\c')

Traceback (most recent call last):
  File "D:/test/test.py", line 7, in <module>
    os.rmdir('D:\\test')
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'D:\\test'



shutil.rmtree('D:\\test\c')

如果存在以下树结构

代码语言:javascript
复制
 - user
   - tester
     - noob
   - developer
     - guru

即 user 目录下存在多级子目录

如果要递归删除user\tester 目录的内容,可使用shutil.rmtree()函数

代码语言:javascript
复制
import shutil
shutil.rmtree(r'user\tester')

mkdir -p foo/bar
python
import shutil
shutil.rmtree('foo/bar')

将会仅仅删除bar

4、压缩与解压文件

Python 2.7版本之后就提供了使用shutil模块实现文件压缩与解压的功能。shutil.make_archive函数的相关参数设置如下表所示。shutil.make_archive函数将test.zip压缩包中的文件解压到了指定路径(C:\\Users\\45543\\Desktop)下的test文件夹里。对压缩文件进行解压处理,需要用到shutil.unpack_archive函数。

shutil.make_archive函数的相关参数

参数说明

功能

base_name

压缩包的文件名,也可以是压缩包的路径,是文件名时,则保存至当前目录,否则保存至指定路径

format

压缩包种类,可以是zip、tar、bztar、gztar

root_dir

要压缩的文件夹路径(默认当前目录)

owner

用户,默认当前用户

group

组,默认当前组

logger

用于记录日志,通常是logging.Logger对象

代码语言:javascript
复制
import shutil

shutil.make_archive("C:\\Users\\45543\\Desktop\\test", 'zip',root_dir= 'C:\\Users\\45543\\Desktop\\程序')

shutil.unpack_archive('C:\\Users\\45543\\Desktop\\test.zip', 'C:\\Users\\ 45543\\Desktop\\test')
代码语言:javascript
复制
import shutil

shutil.move('D:\\test\\a\dog.txt', 'D:\\test\\b')
代码语言:javascript
复制
import shutil

shutil.copyfile('D:\\test\\a\dog2.txt', 'D:\\test\\b\dog1.txt')
代码语言:javascript
复制
import shutil

shutil.copy('C:\\Users\\45543\\Desktop\\pi_digits.txt', 'C:\\Users\\45543\\MyFile.txt')

'C:\\Users\\45543 \\MyFile.txt'
代码语言:javascript
复制
import shutil

shutil.copytree('D:\\test\\a','D:\\test\c')
代码语言:javascript
复制
import shutil

import os

os.unlink('D:\\test\c')


Traceback (most recent call last):
  File "D:/test/test.py", line 5, in <module>
    os.unlink('D:\\test')
PermissionError: [WinError 5] 拒绝访问。: 'D:\\test'



os.rmdir('D:\\test\c')

Traceback (most recent call last):
  File "D:/test/test.py", line 7, in <module>
    os.rmdir('D:\\test')
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'D:\\test'



shutil.rmtree('D:\\test\c')
代码语言:javascript
复制
 - user
   - tester
     - noob
   - developer
     - guru
代码语言:javascript
复制
import shutil
shutil.rmtree(r'user\tester')

mkdir -p foo/bar
python
import shutil
shutil.rmtree('foo/bar')
代码语言:javascript
复制
import shutil

shutil.make_archive("C:\\Users\\45543\\Desktop\\test", 'zip',root_dir= 'C:\\Users\\45543\\Desktop\\程序')

shutil.unpack_archive('C:\\Users\\45543\\Desktop\\test.zip', 'C:\\Users\\ 45543\\Desktop\\test')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、移动文件或文件夹
  • 2、复制文件
  • 3、永久删除文件和文件夹
  • 4、压缩与解压文件
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档