iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python的shutil模块中文件的复制操作函数详解
  • 212
分享到

Python的shutil模块中文件的复制操作函数详解

详解函数模块 2022-06-04 18:06:40 212人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

copy() chutil.copy(source, destination) shutil.copy() 函数实现文件复制功能,将 source 文件复制到 destination 文件夹中,两个参数都是

copy()
chutil.copy(source, destination)
shutil.copy() 函数实现文件复制功能,将 source 文件复制到 destination 文件夹中,两个参数都是字符串格式。如果 destination 是一个文件名称,那么它会被用来当作复制后的文件名称,即等于 复制 + 重命名。举例如下:


 >> import shutil
 >> import os
 >> os.chdir('C:\')
 >> shutil.copy('C:\spam.txt', 'C:\delicious')
 'C:\delicious\spam.txt'
 >> shutil.copy('eggs.txt', 'C:\delicious\eggs2.txt')
 'C:\delicious\eggs2.txt'

如代码所示,该函数的返回值是复制成功后的字符串格式的文件路径。

copyfile()
copyfile()将源的内容复制给目标,如果没有权限写目标文件则产生IoError


from shutil import *
from glob import glob
print 'BEFORE:', glob('huanhuan.*')
copyfile('huanhuan.txt', 'huanhuan.txt.copy')
print 'AFTER:', glob('huanhuan.*')

这个函数会打开输入文件进行读写,而不论其类型,所以某些特殊文件不可以用copyfile()复制为新的特殊文件。


>>> ================================ RESTART ================================
>>> 
BEFORE: ['huanhuan.txt']
AFTER: ['huanhuan.txt', 'huanhuan.txt.copy']

copyfile()实际是使用了底层函数copyfileobj()。copyfile()的参数是文件名,copyfileobj()的参数是打开的文件句柄。第三个参数可选,用于读入块的缓冲区长度。


from shutil import *
import os
from StringIO import StringIO
import sys
class VerboseStringIO(StringIO):
  def read(self, n=-1):
    next = StringIO.read(self, n)
    print 'read(%d) bytes' % n
    return next
lorem_ipsum = '''This makes the dependency explicit, limits the scope to the current file and provides faster access to the bit.* functions, too.
It's Good programming practice not to rely on the global variable bit being set (assuming some other part of your application has already loaded the module).
The require function ensures the module is only loaded once, in any case.'''
print 'Defalut:'
input = VerboseStringIO(lorem_ipsum)
output = StringIO()
copyfileobj(input, output)
print
print 'All at once:'
input = VerboseStringIO(lorem_ipsum)
output = StringIO()
copyfileobj(input, output, -1)
print
print 'Blocks of 256:'
input = VerboseStringIO(lorem_ipsum)
output = StringIO()
copyfileobj(input, output, 256)

默认行为是使用大数据块读取。使用-1会一次性读取所有输入,或者使用其他正数可以设置特定块的大小。


>>> ================================ RESTART ================================
>>> 
Defalut:
read(16384) bytes
read(16384) bytes

All at once:
read(-1) bytes
read(-1) bytes

Blocks of 256:
read(256) bytes
read(256) bytes
read(256) bytes

类似于UNIX命令行工具cp,copy()函数会用同样的方式解释输出名。如果指定的目标指示一个目录而不是一个文件,会使用源文件的基名在该目录中创建一个新文件。


from shutil import *
import os
dir = os.getcwd()
if not os.path.exists('%s\example' % dir):
  os.mkdir('%s\example' % dir)
print 'BEFORE:', os.listdir('example')
copy('huanhuan.txt', 'example')
print 'AFTER:', os.listdir('example')

>>> ================================ RESTART ================================
>>> 
BEFORE: []
AFTER: ['huanhuan.txt']

copy2()

copy2()工作类似copy(),不过复制到新文件的元数据会包含访问和修改时间。


from shutil import *
import os
import time
dir = os.getcwd()
if not os.path.exists('%s\example' % dir):
  os.mkdir('%s\example' % dir)
  
def show_file_info(filename):
  stat_info = os.stat(filename)
  print 'tMode  :', stat_info.st_mode
  print 'tCreated :', time.ctime(stat_info.st_ctime)
  print 'tAccessed:', time.ctime(stat_info.st_atime)
  print 'tModified:', time.ctime(stat_info.st_mtime)

print 'SOURCE:'
show_file_info('huanhuan.txt')
copy2('huanhuan.txt', 'example')
print 'DEST:'
show_file_info('%s\example\huanhuan.txt' % dir)

文件特性和原文件完全相同。


>>> ================================ RESTART ================================
>>> 
SOURCE:
  Mode  : 33206
  Created : Thu Feb 13 17:42:46 2014
  Accessed: Thu Feb 13 17:42:46 2014
  Modified: Thu Feb 13 17:42:46 2014
DEST:
  Mode  : 33206
  Created : Thu Feb 13 18:29:14 2014
  Accessed: Thu Feb 13 17:42:46 2014
  Modified: Thu Feb 13 17:42:46 2014

复制文件元数据
在UNIX创建一个新文件,会根据当前用户的umask接受权限。要把权限从一个文件复制到另一个文件,可以使用copymode()。


from shutil import *
import os
from commands import *
with open('file_to_change.txt', 'wt') as f:
  f.write('i love you')
os.chmod('file_to_change.txt', 0444)
print 'BEFORE:'
print getstatus('file_to_change.txt')
copymode('shutil_copymode.py', 'file_to_change.txt')
print 'AFTER:'
print getstatus('file_to_change.txt')

要复制其他元数据,可以使用copystat()。


from shutil import *
import os
import time
def show_file_info(filename):
  stat_info = os.stat(filename)
  print 'tMode    :', stat_info.st_mode
  print 'tCreated  :', time.ctime(stat_info.st_ctime)
  print 'tAccessed  :', time.ctime(stat_info.st_atime)
  print 'tModified  :', time.ctime(stat_info.st_mtime)
with open('file_to_change.txt', 'wt') as f:
  f.write('i love you')
os.chmod('file_to_Change.txt', 0444)
print 'BEFORE:'
show_file_info('file_to_Change.txt')
copystat('shutil_copystat.py', 'file_to_Change.txt')
print 'AFTER:'
show_file_info('file_to_Change.txt')

使用copystat()只会复制与文件关联的权限和日期。


处理目录树
shutil包含三个函数处理目录树。要把一个目录从一个位置复制到另一个位置,使用copytree()。这会递归遍历源目录树,将文件复制到目标。
copytree()可以将当前这个实现当作起点,在使用前要让它更健壮,可以增加一些特性,如进度条。


from shutil import *
from commands import *
print 'BEFORE:'
print getoutput('ls -rlast /tmp/example')
copytree('../shutil', '/tmp/example')
print 'nAFTER:'
print getoutput('ls -rlast /tmp/example')

symlinks参数控制着符号链接作为链接复制还是文件复制。默认将内容复制到新文件,如果选项为true,会在目标中创建新的符号链接。
要删除一个目录及其内容,可以使用rmtree()。


from shutil import *
from commands import *
print 'BEFORE:'
print getoutput('ls -rlast /tmp/example')
rmtree('/tmp/example')
print 'nAFTER:'
print getoutput('ls -rlast /tmp/example')

将一个文件或目录从一个位置移动到另一个位置,可以使用move()。


from shutil import *
from glob import glob
with open('example.txt', 'wt') as f:
  f.write('i love you')
print 'BEFORE: ', glob('example*')
move('example.txt', 'example.out')
print 'AFTER: ',glob('example*')

其语义与UNIX命令mv类似。如果源与目标都在同一个文件系统内,则会重命名源文件。否则,源文件会复制到目标文件,将源文件删除。


>>> ================================ RESTART ================================
>>> 
BEFORE: ['example', 'example.txt']
AFTER: ['example', 'example.out']

--结束END--

本文标题: Python的shutil模块中文件的复制操作函数详解

本文链接: https://www.lsjlt.com/news/14528.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python shutil模块怎么操作文件
    这篇文章主要讲解了“python shutil模块怎么操作文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python shutil模块怎么操作文件”吧!1、复制文件和文件夹,调用 shu...
    99+
    2023-06-30
  • 怎么在python中使用shutil模块操作文件
    这篇文章给大家介绍怎么在python中使用shutil模块操作文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明...
    99+
    2023-06-14
  • Python中shutil模块的使用详解
    简介:shutil 模块提供了一系列对文件和文件集合的高阶操作。特别是提供了一些支持文件拷贝和删除的函数,该模块主要强大之处在于其对文件的复制与删除操作更是比较支持好。 主要方法: ...
    99+
    2024-04-02
  • python中shutil操作文件的案例
    这篇文章主要介绍python中shutil操作文件的案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、使用函数shutil.make_archive()创建归档文件,并返回归档后的名称。import s...
    99+
    2023-06-14
  • python模块shutil函数应用示例详解教程
    目录本文大纲知识串讲1)模块导入2)复制文件3)复制文件夹4)移动文件或文件夹5)删除文件夹(慎用)6)创建和解压压缩包本文大纲 os模块是Python标准库中一个重要的模块,里面提...
    99+
    2024-04-02
  • Python利用shutil模块实现文件夹的复制删除与裁剪
    目录文件夹的复制文件夹的删除文件夹的裁剪(移动、重命名)文件夹的复制 文件夹复制使用的函数 导入包与模块 `from shutil import copytree 使用方法: cop...
    99+
    2024-04-02
  • Python之shutil模块常用的函数有哪些
    这篇文章主要讲解了“Python之shutil模块常用的函数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python之shutil模块常用的函数有哪些”吧!shutil 是 Pyth...
    99+
    2023-06-16
  • Python文件目录操作常用模块的使用详解
    目录1. os模块1.1 获取系统信息1.2  工作目录与路径相关的操作1.3 判断是否文件或目录以及指定文件目录是否存在1.5 串连创建或者分离一个文件目录路径1.6 执...
    99+
    2024-04-02
  • node里的filesystem模块文件读写操作详解
    目录一、是什么二、文件知识权限位 mode标识位文件描述为 fd三、方法文件读取fs.readFileSyncfs.readFile文件写入writeFileSyncwriteFil...
    99+
    2024-04-02
  • python zipfile模块的文件怎么操作
    本文小编为大家详细介绍“python zipfile模块的文件怎么操作”,内容详细,步骤清晰,细节处理妥当,希望这篇“python zipfile模块的文件怎么操作”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1...
    99+
    2023-06-30
  • python中有哪些文件操作模块
    这篇文章给大家介绍python中有哪些文件操作模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2....
    99+
    2023-06-14
  • Python函数和文件操作详情
    目录前言一、函数二、自定义函数1.创建函数2.调用函数3.函数默认值4.收集函数(可变函数)5.全局与局部6.匿名函数lambda7.内嵌函数三、常用内置函数1.max和min2.a...
    99+
    2024-04-02
  • Python文件操作之二进制文件详解
    目录1.二进制读取模式rb读取模式将读取到的内容写入到文件总结1.二进制读取模式 rt 读取文本文件(默认值) rb 读取二进制文件 file_name = ...
    99+
    2024-04-02
  • python中文件操作修改模块有哪些
    小编给大家分享一下python中文件操作修改模块有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.使用OS模块进行path路径操作操作的语法为os.path...
    99+
    2023-06-02
  • 利用Python中xlwt模块操作excel的示例详解
    目录一、安装二、创建表格并写入三、设置单元格样式四、设置单元格宽度五、设置单元格背景色六、设置单元格内容对齐方式七、单元格添加超链接八、单元格添加公式九、单元格中输入日期十、合并行和...
    99+
    2024-04-02
  • Python利用shutil模块实现文件的裁剪与压缩
    目录利用 shutil 实现文件的裁剪(移动、重命名)文件的删除利用 shutil 实现文件的压缩利用 shutil 实现文件的解压缩今天的章节我们来学习一下文件的裁剪、压缩与解压缩...
    99+
    2024-04-02
  • 一文详解Node中的文件模块与核心模块
    目录前言文件模块普通文件模块的查找自定义模块的查找文件模块的编译执行json 文件的编译执行JavaScript 文件的编译执行C/C++ 扩展模块的编译执行核心模块JavaScri...
    99+
    2024-04-02
  • 使用Python中Tkinter模块的Treeview 组件显示ini文件操作
    前言: Tkinter模块的Treeview组件类似于Dev中的treelist控件,但前者还可以当做树控件和表格控件使用,虽然功能可能没有dev和winform控件那么强大,但是在...
    99+
    2024-04-02
  • nodejs的哪个模块能操作文件
    这篇文章主要介绍“nodejs的哪个模块能操作文件”,在日常操作中,相信很多人在nodejs的哪个模块能操作文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nodejs的哪...
    99+
    2024-04-02
  • Python怎么利用shutil模块实现文件的裁剪与压缩
    本篇内容介绍了“Python怎么利用shutil模块实现文件的裁剪与压缩”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!利用 shutil 实...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作