python专题shutil高阶文件操作

栏目: IT技术 · 发布时间: 4年前

内容简介:如果读者读过知识追寻者其它文件相关专题操作,再来学习这篇高阶文件操作会让你的文件知识瞬间高涨一台阶;本篇文章有些函数作用给知识追寻中感觉是用来伪造信息的,相信如果做网络渗透的读者应该很喜欢这些操作;这本文件读者不仅可以学到文件的移动,复制,删除,还能对文件的元数据进行操作;shutil模块还支持归档操作,这不是本文的重点,详细可以参见官网,如果有空,知识追寻者以后会做这方面的研究学习;随手点赞谢谢;输出:拷贝sour_path文件至tar_path文件,不包括源文件所有元数据信息

一 前言

如果读者读过知识追寻者其它文件相关专题操作,再来学习这篇高阶文件操作会让你的文件知识瞬间高涨一台阶;本篇文章有些函数作用给知识追寻中感觉是用来伪造信息的,相信如果做网络渗透的读者应该很喜欢这些操作;这本文件读者不仅可以学到文件的移动,复制,删除,还能对文件的元数据进行操作;shutil模块还支持归档操作,这不是本文的重点,详细可以参见官网,如果有空,知识追寻者以后会做这方面的研究学习;随手点赞谢谢;

二 shutil 常用函数介绍

函数名称 函数介绍
shutil.copyfileobj(fsrc, fdst[, length]) 从源文件拷贝数据到目标文件;如果给定长度length,只会拷贝对应长度字节的数据;如果文件起始位置不为0,只会拷贝文件起始位置position至end部分内容。如果length为负数不会对数据进行分块循环引用处理(慎用)。
shutil.copyfile(src,dst*, follow_symlinks=True) 将源文件拷贝至目标文件(不包括元数据),返回目标文件路径;如果源文件是符号链接文件,follow_symlinks未设置,则会创建新的符号链接文件;
shutil.copymode(src,dst, *, follow_symlinks=True) 复制源文件的权限到目标文件;不会影响文件的属主,属组,和文件内容;如果源文件和目标文件都是符号链接文件,follow_symlinks设置为False,会对目标文件的模式进行尝试修改;并非每个平台都可以使用此函数;
shutil.copystat(src, dst, *, follow_symlinks=True) 复制文件的权限,上次进入文件时间,上次修改文件时间,标志位到目标文件;不会影响文件的属主,属组,和文件内容
shutil.copy(src, dst, *, follow_symlinks=True) 复制源文件到目标文件;如果目标文件是个目录,已源文件的基本名为基准进行复制;不包括拷贝所有元数据信息;
shutil.copy2(src, dst, *, follow_symlinks=True) 与copy功能类似,会 尝试 拷贝所有元数据信息
shutil.ignore_patterns(* patterns ) 模式匹配,用于 copytree 函数 ignore 属性进行回调处理;
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False) 将源目录下所有文件拷贝至目标目录,并返回目标目录;ignore可以进行模式匹配; copy_function 可以指定复制的函数;dirs_exist_ok如果开启,目标目录或者丢失的父目标如果存在就会发生异常;
shutil.rmtree(path, ignore_errors=False, οnerrοr=None) 删除整个目录; ignore_errors 设置为true,移除文件发生异常时会被忽略;如果设置为false,或者省略,异常交给onerror 处理;
shutil.move( src , dst , copy_function=copy2 ) 递归移动源文件或者目录至目标目录;
shutil.disk_usage(path) 返回给定路径的磁盘统计;以元组新式返回total,free,used;
shutil.chown( path , user=None , group=None ) 改变文件属主,属组;unix平台,可以参照 os.chown 函数不做详细介绍

三 shutil 函数使用示例

3.1copyfileobj

  1. 在source文件夹下创建zszxz.txt,指定源文件路径为sour_path
  2. 指定目的文件名路径tar_path
  3. 执行copyfileobj方法,将源文件对象复制到目的文件对象
# -*- coding: utf-8 -*-
import shutil

""" 复制文件  """
sour_path = r'C:\test\source\zszxz.txt'
tar_path = r'C:\test\target\new_zszxz.txt'
result = shutil.copyfileobj(open(sour_path,'r',encoding='utf=8') , open(tar_path,'w',encoding='utf=8') )

3.2copyfile

  1. 将sour_path文件拷贝至tar_path
  2. 打印返回路径result
# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source\zszxz.txt'
tar_path = r'C:\test\target\new_zszxz.txt'
result = shutil.copyfile(sour_path, tar_path)
print(result)

输出:

C:\test\target\new_zszxz.txt

3.3copymode

  1. 源文件与,目标文件当已存在
  2. 仅拷贝源文件sour_path的权限至目标文件tar_path
# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source\zszxz.txt'
tar_path = r'C:\test\target\new_zszxz.txt'
shutil.copymode(sour_path, tar_path)

3.4 copystat

  1. 拷贝sour_path文件的权限,上次进入文件时间,上次修改文件时间,标志位至目标文件tar_path
  2. 不影响文件的内容,属主,数组;
# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source\zszxz.txt'
tar_path = r'C:\test\target\new_zszxz.txt'
shutil.copystat(sour_path, tar_path)

3.5 copy

拷贝sour_path文件至tar_path文件,不包括源文件所有元数据信息

# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source\zszxz.txt'
tar_path = r'C:\test\target\new_zszxz.txt'
shutil.copy(sour_path, tar_path)

3.6 copy2

拷贝sour_path文件至tar_path文件,尝试拷贝源文件所有元数据信息

# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source\zszxz.txt'
tar_path = r'C:\test\target\new_zszxz.txt'
shutil.copy2(sour_path, tar_path)

3.7copytree

  1. 删除目标target(否则异常,详细说明见章节2)
  2. 将sour_path目录下文件拷贝tar_path目录下;
  3. 忽略拷贝.pyc结尾文件,tmp开头的目录
# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source'
tar_path = r'C:\test\target'
result = shutil.copytree(sour_path, tar_path, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
print(result)

输出

C:\test\target

3.8 rmtree

  1. 删除整个source目录下所有文件
  2. 移除文件发生异常会由shutil.Error进行处理(读者应自定义异常进行处理,知识追寻者这边不作详细处理)
# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source'
shutil.rmtree(sour_path, onerror=shutil.Error)

3.9 move

  1. 将source整个目录包括文件移动到target目录下
  2. 返回目标目录
# -*- coding: utf-8 -*-
import shutil

sour_path = r'C:\test\source'
tar_path = r'C:\test\target'
result = shutil.move(sour_path, tar_path, copy_function=shutil.copy2)
print(result)

输出

C:\test\target\source

3.10 disk_usage

# -*- coding: utf-8 -*-
import shutil

path = r'C:\test\target\source'
result = shutil.disk_usage(path)
print(result)

输出:

usage(total=510979805184, used=230944526336, free=280035278848)

以上所述就是小编给大家介绍的《python专题shutil高阶文件操作》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

《电脑报》2005年合订本(上下)

《电脑报》2005年合订本(上下)

电脑报社主编 / 西南师范大学出版社 / 2006-1 / 45.00元

全套上、下两册,浓缩2005年电脑报精华文章;附录包含70余篇简明IT应用指南,涵盖软件、硬件、数码、网络四大领域,配赠权威实用的2005-2006中国计算机年鉴光盘,近1.4GB海量信息与资源超值奉献,提供2005-2006全系列硬件、数码产品资讯,兼具知识性与资料性,连结购买每年《电脑报合订本》,你将拥有一套完整的实用大型电脑文库。一起来看看 《《电脑报》2005年合订本(上下)》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具