15

python专题shutil高阶文件操作

 4 years ago
source link: https://blog.csdn.net/youku1327/article/details/104086422
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一 前言

如果读者读过知识追寻者其它文件相关专题操作,再来学习这篇高阶文件操作会让你的文件知识瞬间高涨一台阶;本篇文章有些函数作用给知识追寻中感觉是用来伪造信息的,相信如果做网络渗透的读者应该很喜欢这些操作;这本文件读者不仅可以学到文件的移动,复制,删除,还能对文件的元数据进行操作;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)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK