转自:

https://www.cnblogs.com/wuzhiblog/p/6535527.html

https://www.cnblogs.com/caibao666/p/6433864.html


shutil 复制、移动、重命名、删除

shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来记忆模块的名称。该模块拥有许多文件(夹)操作的功能,包括复制、移动、重命名、删除等等

  1. 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'

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

  2. shutil.copytree(source, destination)
    shutil.copytree()函数复制整个文件夹,将 source 文件夹中的所有内容复制到 destination 中,包括 source 里面的文件、子文件夹都会被复制过去。两个参数都是字符串格式。

    注意,如果 destination 文件夹已经存在,该操作并返回一个 FileExistsError 错误,提示文件已存在。即表示,如果执行了该函数,程序会自动创建一个新文件夹(destination参数)并将 source 文件夹中的内容复制过去
    举例如下:

>> import shutil
>> import os
>> os.chdir('C:\')
>> shutil.copytree('C:\bacon', 'C:\bacon_backup')
'C:\bacon_backup'

如以上代码所示,该函数的返回值是复制成功后的文件夹的绝对路径字符串
所以该函数可以当成是一个备份功能
  1. shutil.move(source, destination)
    shutil.move() 函数会将 source 文件或文件夹移动到 destination 中。返回值是移动后文件的绝对路径字符串。
    如果 destination 指向一个文件夹,那么 source 文件将被移动到 destination 中,并且保持其原有名字。例如:

>> import shutil
>> shutil.move('C:\bacon.txt', 'C:\eggs')
'C:\eggs\bacon.txt'

上例中,如果 C:\eggs 文件夹中已经存在了同名文件 bacon.txt,那么该文件将被来自于 source 中的同名文件所重写。

如果 destination 指向一个文件,那么 source 文件将被移动并重命名,如下:

>> shutil.move('C:\bacon.txt', 'C:\eggs\new_bacon.txt')
'C:\eggs\new_bacon.txt'

等于是移动+重命名

<b>注意,如果 destination 是一个文件夹,即没有带后缀的路径名,那么 source 将被移动并重命名为 destination</b>,如下:

>> shutil.move('C:\bacon.txt', 'C:\eggs')
'C:\eggs'

即 bacon.txt 文件已经被重命名为 eggs,是一个没有文件后缀的文件

最后,destination 文件夹必须是已经存在的,否则会引发异常:

>> shutil.move('spam.txt', 'C:\does_not_exist\eggs\ham')
Traceback (most recent call last):
File "D:\Python36\lib\shutil.py", line 538, in move
os.rename(src, real_dst)
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'test.txt' -> 'C:\does_not_exist\eggs\ham'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#5>", line 1, in 
shutil.move('test.txt', 'C:\does_not_exist\eggs\ham')
File "D:\Python36\lib\shutil.py", line 552, in move
copy_function(src, real_dst)
File "D:\Python36\lib\shutil.py", line 251, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "D:\Python36\lib\shutil.py", line 115, in copyfile
with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\does_not_exist\eggs\ham'

  1. 永久性删除文件和文件夹
    这里有涉及到 os 模块中的相关函数
    os.unlink(path) 会删除 path 路径文件
    os.rmdir(path) 会删除 path 路径文件夹,但是这个文件夹必须是空的,不包含任何文件或子文件夹
    shutil.rmtree(path) 会删除 path 路径文件夹,并且在这个文件夹里面的所有文件和子文件夹都会被删除

利用函数执行删除操作时,应该倍加谨慎,因为如果想要删除 txt 文件,而不小心写到了 rxt ,那么将会给自己带来麻烦
此时,我们可以利用字符串的 endswith 属性对文件格式进行检查与筛选


shutil:高级的 文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc, fdst[, length])(copyfileobj方法只会拷贝文件内容)
将文件内容拷贝到另一个文件中

import shutil

shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

shutil.copyfile(src, dst)  (copyfile只拷贝文件内容)
拷贝文件

shutil.copyfile('f1.log', 'f2.log')

shutil.copy(src, dst) 拷贝文件和权限

shutil.copy('f1.log', 'f2.log')

shutil.copy2(src, dst)

拷贝文件和状态信息

shutil.copy2('f1.log', 'f2.log'

shutil.copymode(src, dst)  (前提是dst文件存在,不然报错)
仅拷贝权限。内容、组、用户均不变

shutil.copymode('f1.log', 'f2.log')

shutil.copystat(src, dst)
仅拷贝状态的信息,即文件属性,包括:mode bits, atime, mtime, flags

shutil.copystat('f1.log', 'f2.log')

shutil.ignore_patterns(*patterns)  (忽略哪个文件,有选择性的拷贝)

shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹

shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

shutil.rmtree('folder1')

shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。

shutil.move('folder1', 'folder3')

shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

创建压缩包并返回文件路径,例如:zip、tar

  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如:www                        =>保存至当前路径 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
  • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
  • root_dir: 要压缩的文件夹路径(默认当前目录)
  • owner: 用户,默认当前用户
  • group: 组,默认当前组
  • logger: 用于记录日志,通常是logging.Logger对象
    #将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
    
    import shutil
    
    ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
    
    #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
    
    import shutil
    
    ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close() # 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()
import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log')
tar.close() # 解压
tar = tarfile.open('your.tar','r')
tar.extractall() # 可设置解压地址
tar.close()

备注:zipfile压缩不会保留文件的状态信息,而tarfile会保留文件的状态信息

[转]Python shutil 模块的更多相关文章

  1. python shutil模块简单介绍

    python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...

  2. Python shutil模块

    shutil模块下 copy(复制).rm(删除).move(移动) 常用方法举例. copyfileobj(fsrc, fdst[, length])copyfile(src, dst, *, fo ...

  3. Python shutil模块(目录和文件操作)

    import shutil #导入shutil模块 copyfileobj方法 将类文件对象fsrc的内容复制到类文件对象fdst shutil.copyfileobj(fsrc, fdst[, le ...

  4. python shutil模块&random模块

    shutil模块 import shutil shutil.copyfileobj(open("os_.py", "r"), open("os_2.p ...

  5. 11 python shutil 模块

      shutil 模块 高级的 文件.文件夹.压缩包 处理模块 1.将文件内容拷贝到另一个文件中 import shutil f1 = open('os_模块.py','r',encoding='ut ...

  6. python shutil 模块 的剪切文件函数 shutil.movemove(src, dst),换用 os.rename(sourceFile, targetFile)

    Google 一搜python 剪切文件,出来shutil 这模块,网上很多人也跟疯说shutil.move(src, dst)就是用来剪切文件的,结果一试,剪切毛线,文件都复制到另一个文件夹了,源文 ...

  7. python—shutil模块

    该模块拥有许多文件或文件的删除.移动.复制.重命名等功能. 1.copy():复制文件 格式:shutil.copy(来源文件,目标地址) 返回值:返回复制之后的路径 2.copy2():复制文件和状 ...

  8. Python shutil 模块学习笔记

    学于https://automatetheboringstuff.com shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来 ...

  9. Python shutil 模块

    高级的文件.文件夹.压缩包 处理模块 http://www.cnblogs.com/wupeiqi/articles/4963027.html

随机推荐

  1. 【Java并发编程】14、Thread,线程说明

    线程的状态:New.Runnable.Blocked.Waiting.Timed waiting.Terminated 1. RUNNABLE,对应"就绪"和"运行&qu ...

  2. Java集合的选择

    我们在使用集合时应该使用哪个集合呢? 具体还是要看需求, 当然, Java中不只是有这几个, 还有一些没有给出, 具体情况具体分析吧, 仅给出一个小思路. 进行集合的选择:  是否是键值对象形式: 一 ...

  3. hive的本地安装部署,元数据存储到mysql中

    要想使用Hive先要有hadoop集群的支持,使用本地把元数据存储在mysql中. mysql要可以远程连接: 可以设置user表,把localhost改为%,所有可连接.记住删除root其他用户,不 ...

  4. 自定义SharePoint2013 master page

    SharePoint uses templates to define and render the pages that a site displays. The structure of a Sh ...

  5. canvas-2drawRectFun.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JavaScript 频繁发射事件处理的优化 --- 函数节流/事件稀释

    引子:昨天面试时面试官问了如何实现一个固定导航栏,在我答完后面试官问我可能存在哪些问题,如何优化? 这个问题我答得不太好,但现在回想起来应该有两个问题: 1. 把 fixbar元素 position: ...

  7. 通过了解JS的clientX、pageX、screenX等方法来获取鼠标位置相对屏幕,相对浏览器窗口,相对文档的坐标详解

    在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊 ...

  8. stylus解决移动端1像素边框的问题

    首先 我是借用了yo框架的border和他的媒体查询组合 这两个分别是在yo>lib>core>classes>_border.scss(用来获取yo框架封装的border) ...

  9. numpy之random学习

    在机器学习中参数初始化需要进行随机生成,同时样本也需要随机生成,或者遵从一定规则随机生成,所以对随机生成的使用显得格外重要. 有的是生成随机数,有的是随机序列,有点是从随机序列中选择元素等等. 简单的 ...

  10. loadrunner Vugen-Tools General-Options-Replay设置

    Vugen-Tools General-Options-Replay设置 by:授客 QQ:1033553122 可以以动画模式或非动画模式(animated mode or non-animated ...