shutil模块

shutil模块

提供了大量的文件的高级操作,特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作

常用方法

  • shutil.copyfile(src, dst) 复制文件内容(不包含元数据)从src到dst。 DST必须是完整的目标文件名。如果src和dst是同一文件,就会引发错误shutil.Error。dst必须是可写的,否则将引发异常IOError。如果dst已经存在,它会被替换。特殊文件,例如字符或块设备和管道不能使用此功能,因为copyfile会打开并阅读文件。 src和dst的是字符串形式的路径名
  • shutil.copyfileobj(fsrc, fdst[, length]) 复制文件内容,从类文件对象src到类文件对dst。可选参数length指定缓冲区的大小,负数表示一次性读入。默认会把数据切分成小块拷贝,以免占用太多内存。注意:拷贝是从fsrc的当前文件开始
  • shutil.copymode(src,dst) 拷贝权限,不包括属主和属组
  • shutil.copy(src,dst) 拷贝文件,包括权限
  • shutil.copy2(src,dst) 拷贝文件,包括权限和状态信息 类似于Unix命令cp -p
  • shutil.copystat(src, dst) 拷贝文件状态
  • shutil.chown(name,user,group) 改变用户属主属组
    举例:
import  shutil



shutil.copyfile('test.xml','testxml.xml')       #拷贝文件
shutil.copyfile('test.xml','testxml2.xml')       #拷贝文件
shutil.copyfileobj(open('test.xml','r'),open('test1.xml','w'))       #拷贝文件内容
shutil.copymode('test.xml','testxml.xml')    #将test.xml文件的权限拷贝给testxml.xml
shutil.copy('test.xml','test3.xml')    #拷贝文件和权限
shutil.copy2('test.xml','test4.xml')    #拷贝文件和状态


结果:
-rwxrwxrwx 1 root      staff   690  6 19 11:13 test.xml   #源文件
-rwxrwxrwx 1 fuzengjie staff   690  6 22 17:50 testxml.xml*   #copyfile 的结果,又经过了copymode处理,权限改变,状态改变
-rw-r--r-- 1 fuzengjie staff   690  6 22 17:50 testxml2.xml  #copyfile 的结果,元数据没有拷贝
-rw-r--r-- 1 fuzengjie staff   690  6 22 17:50 test1.xml   #copyfileobj 的结果,元数据没有拷贝****
-rwxrwxrwx 1 fuzengjie staff   690  6 22 17:50 test3.xml*   #copy的结果,权限没变,状态改变
-rwxrwxrwx 1 fuzengjie staff   690  6 19 11:13 test4.xml*    #copy2的结果,权限和状态都没变

 

  • shutil.ignore_patterns(*patterns) 忽略某些文件
  • shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件,dst必须是不存在的一个目录
>>> shutil.copytree('day07','test', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))    #拷贝day07目录为test
'test'

 

  • shutil.rmtree 删除目录
 shutil.rmtree("test")

 

  • shutil.move(src,dst) 移动目录
  • shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,
    dry_run=0, owner=None, group=None, logger=None)

    • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如:www =>保存至当前路径 如:/Users/beyond/www =>保存至/Users/beyond/
    • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    • root_dir: 要压缩的文件夹路径(默认当前目录)
    • owner: 用户,默认当前用户
    • group: 组,默认当前组
    • logger: 用于记录日志,通常是logging.Logger对象
>>> shutil.make_archive("test",'tar',root_dir='day07')
'/Users/fuzengjie/Git/gitlab/study/code/test.tar'
>>> shutil.make_archive("test",'zip',root_dir='day07')
'/Users/fuzengjie/Git/gitlab/study/code/test.zip'

 

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的。下面介绍两个模块的使用

  • zipfile()
import zipfile
z = zipfile.ZipFile("test.zip",'w')     #创建压缩文件
z.write('newtest.xml')       #将需要压缩的文件写入压缩文件
z.write('test.xml')
z.close()

z = zipfile.ZipFile("test.zip",'r')        #读压缩文件
file_list  = z.namelist()                       #获取压缩文件中的文件列表
z.extract('test1.xml')   #解压单个文件
#z.extractall()             #解压所有文件

 

  • tarfile()
import tarfile
t = tarfile.open("test.tar","w")
t.add("test.xml",arcname="aaaaaa")    #添加文件到压缩文件中,并取名aaaaa
t.add("test.xml",arcname="bbb")    #添加文件到压缩文件中,并取名bbb

t.close()



t = tarfile.open("test.tar",'r')
s = t.getnames()       #获取压缩文件中的文件列表
t.extract('bbb')     #解压bbb文件
#t.extractall()    #解压所有文件
print(s)

 

posted @ 2016-06-25 11:44  Fuzengjie  阅读(1075)  评论(0编辑  收藏  举报