当前位置:
首页 > Python基础教程 >
-
Python3标准库:shutil高层文件操作
1. shutil高层文件操作
shutil模块包括一些高层文件操作,如复制和归档。
1.1 复制文件
copyfile()将源文件的内容复制到目标文件,如果没有权限写目标文件,则会产生IOError。
- import glob
- import shutil
- print('BEFORE:', glob.glob('shutil_copyfile.*'))
- shutil.copyfile('shutil_copyfile.py', 'shutil_copyfile.py.copy')
- print('AFTER:', glob.glob('shutil_copyfile.*'))
由于这个函数会打开输入文件进行读取,而不论其类型,所以某些特殊文件(如UNIX设备节点)不能用copyfile()复制为新的特殊文件。
copyfile()的实现使用了底层函数copyfileobj()。copyfile()的参数是文件名,但copyfileobj()的参数是打开的文件句柄。还可以有第三个参数(可选):读入块使用的一个缓冲区长度。
- import io
- import os
- import shutil
- import sys
- class VerboseStringIO(io.StringIO):
- def read(self, n=-1):
- next = io.StringIO.read(self, n)
- print('read({}) got {} bytes'.format(n, len(next)))
- return next
- 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('Default:')
- input = VerboseStringIO(lorem_ipsum)
- output = io.StringIO()
- shutil.copyfileobj(input, output)
- print()
- print('All at once:')
- input = VerboseStringIO(lorem_ipsum)
- output = io.StringIO()
- shutil.copyfileobj(input, output, -1)
- print()
- print('Blocks of 256:')
- input = VerboseStringIO(lorem_ipsum)
- output = io.StringIO()
- shutil.copyfileobj(input, output, 256)
默认行为是使用大数据块读取。使用-1会一次读入所有输入,或者也可以使用其他正数,这会设置特定的块大小。下面这个例子将使用多个不同的块大小来展示效果。
类似于UNIX命令行工具cp,copy()函数会用同样的方式解释输出名。如果指定的目标指示一个目录而不是一个文件,则会使用源文件的基名在该目录中创建一个新文件。
- import glob
- import os
- import shutil
- os.mkdir('example')
- print('BEFORE:', glob.glob('example/*'))
- shutil.copy('shutil_copy.py', 'example')
- print('AFTER :', glob.glob('example/*'))
一同复制文件的权限与内容。
copy2()的工作类似于copy(),不过会在复制到新文件的元数据中包含访问的修改时间。
- import os
- import shutil
- import time
- def show_file_info(filename):
- stat_info = os.stat(filename)
- print(' Mode :', oct(stat_info.st_mode))
- print(' Created :', time.ctime(stat_info.st_ctime))
- print(' Accessed:', time.ctime(stat_info.st_atime))
- print(' Modified:', time.ctime(stat_info.st_mtime))
- os.mkdir('example')
- print('SOURCE:')
- show_file_info('shutil_copy2.py')
- shutil.copy2('shutil_copy2.py', 'example')
- print('DEST:')
- show_file_info('example/shutil_copy2.py')
这个新文件的所有特性读与原文件完全相同。
1.2 复制文件元数据
默认的,在UNIX下创建一个新的文件时,它会根据当前用户的umask接受权限。要把权限从一个文件复制到另一个文件,可以使用copymode()。
- import os
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式