Python 里边 os 模块虽然有一些文件目录创建和删除的部分简单操作,但是有一点很不太友好,就是删除目录的时候还必须让目录为空——虽然比较安全,我也能理解,但是让我很不爽,毕竟我想要的是 rm -rf 的那种摧枯拉朽的气势:

os.makedirs()
os.makedir()
os.remove()
os.removedirs()
os.rmdir()root@master ~# python3
Python 3.6.8 (default, Aug  7 2019, 17:28:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.removedirs('/root/pandas')
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib64/python3.6/os.py", line 238, in removedirsrmdir(name)
OSError: [Errno 39] Directory not empty: '/root/pandas'
>>> os.rmdir('/root/pandas')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
OSError: [Errno 39] Directory not empty: '/root/pandas'

以致于每当我想递归删除目录,或者递归拷贝目录的时候,只能求助于 subprocess 了。

import subprocesssubprocess.run(['rm', '-rf', 'run'],stderr=subprocess.STDOUT, stdout=subprocess.DEVNULL)
subprocess.run(['cp', '-r', config_dir, root_path],stderr=subprocess.STDOUT, stdout=subprocess.DEVNULL)

这时候,shutil 就上场了,如果用 shutil 的话,语法就很简单了。

(注意:shell 命令 cp 是不会主动创建 dst 目录的,但是 shutil.copytree 会;简单理解就是:shutil.copytree 会将 src 文件夹里的所有内容拷贝至 dst 文件夹,和 cp 命令稍微有点差异)。

import shutilshutil.rmtree('run')
shutil.copytree(config_dir, os.path.join(root_path, 'config'))

具体用法如下。

copytree

copytree(src, dst, symlinks=False, ignore=None): 拷贝文档树,将 src 文件夹里的所有内容拷贝至 dst 文件夹

  • src:源文件夹
  • dst:复制至 dst 文件夹,该文件夹会自动创建,需保证此文件夹不存在,否则将报错
  • symlinks:是否复制软连接,True复制软连接,False不复制,软连接会被当成文件复制过来,默认False。

rmtree

rmtree(path, ignore_errors=False, οnerrοr=None): 移除文档树,将文件夹目录删除。我自己感觉有点像  rm -rf path

copyfile

copyfile(src, dst): 将 src 文件内容复制至 dst 文件

  • src: 源文件路径
  • dst: 复制至 dst 文件,若 dst 文件不存在,将会生成一个 dst 文件;若存在将会被覆盖
import shutil
shutil.copyfile("file.txt","file_copy.txt")

copymode

copymode(src, dst): 将 src 文件权限复制至 dst 文件。文件内容,所有者和组不受影响

  • src: 源文件路径
  • dst: 将权限复制至 dst 文件,dst 路径必须是真实的路径,并且文件必须存在,否则将会报文件找不到错误
import shutil
shutil.copymode("file.txt","file_copy.txt")

copystat

copystat(src, dst): 将权限,上次访问时间,上次修改时间以及 src 标志复制到 dst。文件内容,所有者和组不受影响

  • src: 源文件路径
  • dst: 将权限复制至 dst 文件,dst 路径必须是真实的路径,并且文件必须存在,否则将会报文件找不到错误。
import shutil
shutil.copystat("file.txt","file_copy.txt")

copy

copy(src, dst): 将文件 src 复制至 dst。dst 如果是个目录,会在该目录下创建与 src 同名的文件。权限会被一并复制。本质是先后调用了 copyfile 与 copymode 而已。

  • src:源文件路径
  • dst:复制至 dst 文件夹或文件
>>> import shutil
>>> shutil.copy('file', 'filecopy')
'filecopy'
>>> shutil.copy('file', './upload')
'./upload/file'
>>> shutil.copy('file', './upload/file')
'./upload/file'
>>> shutil.copy('file', './upload/filecopy')
'./upload/filecopy'

copy2

copy2(src, dst): 将文件 src 复制至 dst。dst 如果是个目录,会在该目录下创建与 src 同名的文件,若该目录下存在同名文件,将会报错提示已经存在同名文件。权限、上次访问时间、上次修改时间和 src 的标志会一并复制至 dst。本质是先后调用了copyfile 与 copystat方法而已。

  • src:源文件路径
  • dst:复制至 dst 文件夹或文件
>>> import shutil
>>> shutil.copy2('file', 'filecopy')
'filecopy'
>>> shutil.copy2('file', './upload')
'./upload/file'
>>> shutil.copy2('file', './upload/filecopy')
'./upload/filecopy'

move

move(src, dst): 将 src 移动至 dst 目录下。若 dst 目录不存在,则效果等同于 src 改名为 dst。若 dst 目录存在,将会把 src 文件夹的所有内容移动至该目录下面

  • src:源文件夹或文件
  • dst:移动至 dst 文件夹,或将文件改名为 dst 文件。如果 src 为文件夹,而 dst 为文件将会报错
import shutil,os
# 示例一,将src文件夹移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作
folder1 = os.path.join(os.getcwd(),"aaa")
folder2 = os.path.join(os.getcwd(),"bbb")
shutil.move(folder1, folder2)
# 示例二,将src文件移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作
file1 = os.path.join(os.getcwd(),"aaa.txt")
folder2 = os.path.join(os.getcwd(),"bbb")
shutil.move(file1, folder2)
# 示例三,将src文件重命名为dst文件(dst文件存在,将会覆盖)
file1 = os.path.join(os.getcwd(),"aaa.txt")
file2 = os.path.join(os.getcwd(),"bbb.txt")
shutil.move(file1, file2)

chown

chown(path, user=None, group=None): 修改路径指向的文件或文件夹的所有者或分组。

  • path:路径
  • user:所有者,传递user的值必须是真实的,否则将报错no such user
  • group:分组,传递group的值必须是真实的,否则将报错no such group
import shutil,os
path = os.path.join(os.getcwd(),"file.txt")
shutil.chown(path,user="root",group="root")

which

which(cmd, mode=os.F_OK | os.X_OK, path=None): 获取给定的cmd命令的可执行文件的路径。

import shutil
info = shutil.which("python3")
print(info)   # /usr/bin/python3

Python 中 shutil 的使用相关推荐

  1. python中shutil.copyfile的用法_Python shutil.copyfile()用法及代码示例

    Python中的Shutil模块提供了许多对文件和文件集合进行高级操作的功能.它属于Python的标准实用程序模块.此模块有助于自动执行文件和目录的复制和删除过程. shutil.copyfile() ...

  2. python中shutil模块的用法-高级文件操作模块

    目录 前言 一.shutil是什么? 二.使用步骤 1. 安装shutil库 2. shutil库的使用 3. 复制函数 3.1 shutil.copy(src,dst) ==> 拷贝文件和权限 ...

  3. python中shutil模块_python文件、文件夹、压缩包处理模块-shutil模块-阿里云开发者社区...

    shutil模块 高级的文件.文件夹.压缩包 处理模块 本节内容基本在linux下python交互环境实现 复制移动文件.文件夹 将文件内容拷贝到另一个文件中,可以部分内容 格式如下: ``` shu ...

  4. python中shutil模块的用法_python中的os,shutil模块的定义以及用法

    #os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为'\\'os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户 ...

  5. python中shutil是什么意思,很多关于shutil的错误,说文件在Python中时不存在

    以下是我的所有代码:import shutil import glob import os for filename in glob.glob(r"C:/Users/Aydan/Deskto ...

  6. python中shutil是什么意思_python之shutil模块详解

    -- --High-level file operations  高级的文件操作模块. os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如说:绝对路径,父目 ...

  7. python中shutil.copyfile的用法_用Python复制文件的9个方法

    Python 中有许多"开盖即食"的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作.在这篇文章中,你将会看到一些用 Python 实现文件复制的 ...

  8. python中shutil模块

    shutil是对OS中文件操作的补充:移动.复制.打包.压缩.解压. 1.copy文件内容到另一个文件,可以copy指定大小的内容. shutil.copyfileobj(fsrc, fdst[, l ...

  9. python中shutil是什么意思_python中shutil模块

    shutil是对OS中文件操作的补充:移动.复制.打包.压缩.解压. 1.copy文件内容到另一个文件,可以copy指定大小的内容.shutil.copyfileobj(fsrc, fdst[, le ...

  10. python中shutil.copyfile的用法_python模块之shutil

    shutil模块提供了一些针对文件和目录的高级操作,主要是拷贝.移动.对于单个文件的操作,还可参考os模块 Warning:即使是高级别的拷贝函数(shutil.copy(),shutil.copy2 ...

最新文章

  1. 建博客的原因。。。。
  2. 结合jenkins以及PTP平台的性能回归测试
  3. 官网快速搭建spring boot 项目
  4. mysql汉字占几个字符_mysql和oracle的一个汉字占几个字符
  5. PHP10段常用功能代码
  6. 预训练模型对实体的表示能力差?一个简单有效的解法来了!(开源)
  7. c语言中转义字符有什么作用,C语言中转义字符有什么作用?
  8. html表格中插入单行文本框,el-table复选框选中单行或多行点击按钮禁用el-table里面的input输入框该怎么判断?...
  9. HTML5 表单相关
  10. 去哪儿网:报复性滑雪来了 机票预订量超去年
  11. Linux 10分钟掌握Linux常用开发工具及编译的四个过程
  12. 机器学习和算法学习网址
  13. db.serverStatus()
  14. python实现数据库查询导出到excel案例
  15. 织梦采集侠自动采集伪原创发布设置
  16. 通达信标记符号_通达信49个图标,高手指教,通达信软件里的股票标记符号,能增加吗...
  17. centos7下载busybox
  18. 内存卡坏了怎么修复?内存卡恢复也不难
  19. 招行两地一卡——PayPal美元兑换人民币的最佳解决方案
  20. 测试经典名言100句

热门文章

  1. SecureCRT使用之自动记录日志功能
  2. Python如何启动windows本地程序
  3. 【Spring源码】 Spring IoC容器启动之Bean创建流程
  4. Python爬虫实列:新浪微博热门话题
  5. SL9008B DCDC3.1V~60V内置MOS开关降压型LED恒流驱动器
  6. 一个好的程序员通常要懂的操作技能
  7. dtree java_dtree的使用
  8. 大神的ACM训练计划(详细)
  9. java 地理围栏算法,计算几何(1)——地理围栏相关算法
  10. Xshell解决中文乱码问题