首页 > 代码库 > shutil模块
shutil模块
# -*- coding: utf-8 -*-
# python:2.x
__author__ = ‘Administrator‘
#shutil
# 作用:高级文件操作
#版本:1.4及以后
#其他:包含了一些高级文件操作,如复制和设置限制
import shutil,glob,os,StringIO,time
#复制文件
#copyfile()将指定的源文件内容复制到目标路径,如果没有权限写目标文件则ioerror
print ‘beeror‘,glob.glob(r‘a/*.*‘)
shutil.copyfile(‘a.py‘,r‘a/b.py‘)
print ‘after:‘,glob.glob(r‘a/*.*‘)
#由于copyfile()函数会打开输入文件进行读取,而且无论它是什么类型,所以在某些特殊文件(如unix设备节点)不能使用这个函数进行复制
#copyfile()实现了底层函数copyfileobj(),copyfile()参数是文件名,但copyfileobj()参数是打开文件句柄,还可以有第三个参数(可选):用于读入块的一个缓冲区长度
class VerboseStringIO(StringIO.StringIO):
def read(self,n=-1):
next1=StringIO.StringIO.read(self,n)
print ‘read(%d)bytes‘%(n)
return next1
lorem_ipsum=‘‘‘Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Vestibulum aliquam mollis dolor. Donec vulputate nunc ut diam.
Ut rutrum mi vel sem. Vestibulum ante ipsum.‘‘‘
print ‘defauilt:‘
inputa=VerboseStringIO(lorem_ipsum)
outputa=StringIO.StringIO()
shutil.copyfileobj(inputa,outputa)
print ‘all at onec:‘
inputa=VerboseStringIO(lorem_ipsum)
outputa=StringIO.StringIO()
shutil.copyfileobj(inputa,outputa,-1)
print ‘all at 256:‘
inputa=VerboseStringIO(lorem_ipsum)
outputa=StringIO.StringIO()
shutil.copyfileobj(inputa,outputa,256)
#默认情况下是读取大数据块,使用-1会一次读入所有输入,或者使用其他正数可以设置块的大小
#copy()函数会用同样的方式解释输出,如果指定目标指示一个目录而不是一个文件,会使用源文件基名在该目录中创建一个新文件
# os.mkdir(r‘a/p1‘)
# print ‘berorr:‘,os.listdir(r‘a/p1‘)
# shutil.copy(r‘a/b.py‘,r‘a/p1/a.py‘)
# print ‘after:‘,os.listdir(r‘a/p1‘)
#copy2()工作类似copy(),不过复制到新文件的元数据中会包含访问和修改时间
# def show1_file_info(filename):
# stat_info=os.stat(filename)
# print ‘\tmode :‘,stat_info.st_mode
# print ‘\tcreate:‘,time.ctime(stat_info.st_ctime)
# print‘\taccessed:‘,time.ctime(stat_info.st_atime)
# print ‘\tmodifind:‘,time.ctime(stat_info.st_mtime)
# os.mkdir(r‘a/t‘)
# print‘source‘
# show1_file_info(r‘a/b.py‘)
# shutil.copy2(r‘a/b.py‘,r‘a/t/b.py‘)
# print ‘dest:‘
# show1_file_info(r‘a/t/b.py‘)
#复制文件元数据
#unix默认情况下,会新建一个文件,它会根据当前用户的umask接受权限,要把权限从一个文件复制到另一个文件,使用copymode()
import commands
# with open(r‘a/c.txt‘,‘wt‘) as f:
# f.write(‘conters‘)
# os.chmod(r‘a/c.txt‘,0444)
# print ‘before:‘
# print commands.getstatus(r‘a/c.txt‘)
# shutil.copymode(r‘a/b.py‘,r‘a/c.txt‘)
# print ‘ater:‘
# print commands.getstatus(r‘a/c.txt‘)
#要复制文件的其他元数据,使用copystat()
# def show1_file_info(filename):
# stat_info=os.stat(filename)
# print ‘\tmode :‘,stat_info.st_mode
# print ‘\tcreate:‘,time.ctime(stat_info.st_ctime)
# print‘\taccessed:‘,time.ctime(stat_info.st_atime)
# print ‘\tmodifind:‘,time.ctime(stat_info.st_mtime)
# with open(r‘a/c.txt‘,‘wt‘) as f:
# f.write(‘conter‘)
# os.chmod(r‘a/c.txt‘,0444)
# print ‘before:‘
# print commands.getstatus(r‘a/c.txt‘)
# shutil.copymode(r‘a/b.py‘,r‘a/c.txt‘)
# print ‘ater:‘
# print commands.getstatus(r‘a/c.txt‘)
#使用copystat()只会复制与文件关联的权限和日期
#shutil官方文档:https://docs.python.org/2/library/shutil.html?http://zh.wikipedia.org/wiki/Base64?
#相关1:http://automationtesting.sinaapp.com/blog/m_shutil
#相关2:http://pymotw.com/2/shutil/?http://effbot.org/librarybook/shutil.htm