首页 > 代码库 > 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

print ‘all at onec:‘

inputa=VerboseStringIO(lorem_ipsum)

outputa=StringIO.StringIO()

shutil.copyfileobj(inputa,outputa,-1)

print

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