• python专题shutil高阶文件操作


    一 前言

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

    公众号:知识追寻者

    知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

    二 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, onerror=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:	estsourcezszxz.txt'
    tar_path = r'C:	est	arget
    ew_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:	estsourcezszxz.txt'
    tar_path = r'C:	est	arget
    ew_zszxz.txt'
    result = shutil.copyfile(sour_path, tar_path)
    print(result)
    

    输出:

    C:	est	arget
    ew_zszxz.txt
    

    3.3copymode

    1. 源文件与,目标文件当已存在
    2. 仅拷贝源文件sour_path的权限至目标文件tar_path
    # -*- coding: utf-8 -*-
    import shutil
    
    sour_path = r'C:	estsourcezszxz.txt'
    tar_path = r'C:	est	arget
    ew_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:	estsourcezszxz.txt'
    tar_path = r'C:	est	arget
    ew_zszxz.txt'
    shutil.copystat(sour_path, tar_path)
    

    3.5 copy

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

    # -*- coding: utf-8 -*-
    import shutil
    
    sour_path = r'C:	estsourcezszxz.txt'
    tar_path = r'C:	est	arget
    ew_zszxz.txt'
    shutil.copy(sour_path, tar_path)
    

    3.6 copy2

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

    # -*- coding: utf-8 -*-
    import shutil
    
    sour_path = r'C:	estsourcezszxz.txt'
    tar_path = r'C:	est	arget
    ew_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:	estsource'
    tar_path = r'C:	est	arget'
    result = shutil.copytree(sour_path, tar_path, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
    print(result)
    

    输出

    C:	est	arget
    

    3.8 rmtree

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

    3.9 move

    1. 将source整个目录包括文件移动到target目录下
    2. 返回目标目录
    # -*- coding: utf-8 -*-
    import shutil
    
    sour_path = r'C:	estsource'
    tar_path = r'C:	est	arget'
    result = shutil.move(sour_path, tar_path, copy_function=shutil.copy2)
    print(result)
    

    输出

    C:	est	argetsource
    

    3.10 disk_usage

    # -*- coding: utf-8 -*-
    import shutil
    
    path = r'C:	est	argetsource'
    result = shutil.disk_usage(path)
    print(result)
    

    输出:

    usage(total=510979805184, used=230944526336, free=280035278848)
    
  • 相关阅读:
    Linux netstat命令详解
    createdb test时报global/pg_filenode.map不存在
    详解神经网络中的反向传播
    Android学习20--OpenGL的"mapPoints"
    C++指向常量的指针和常指针
    git合并别的分支某次提交或合并
    Java实现GB2312文件转UTF8文件
    Windows Opengl ES 环境搭建
    android学习19--Matrix.mapPoints作用
    无能量损失弹跳效果的实现
  • 原文地址:https://www.cnblogs.com/zszxz/p/12842894.html
Copyright © 2020-2023  润新知