码迷,mamicode.com
首页 > 其他好文 > 详细

shutil模块

时间:2016-06-25 12:29:03      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

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)

 

shutil模块

标签:

原文地址:http://www.cnblogs.com/pycode/p/shutil.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!