首页 > 编程语言 >Python使用shutil模块操作文件/文件夹

Python使用shutil模块操作文件/文件夹

时间:2024-02-26 19:35:02浏览次数:39  
标签:文件 移动 Python 目标 文件夹 复制 shutil

  Python的标准库中os模块已经可以操作文件了,但是具有很多局限性(比如不能复制文件),因此Python的另一个标准库shutil对文件/文件夹的移动,复制,删除文件夹,压缩,解压等操作做了增强,更加方便用户进行使用。

 1、复制文件/文件夹(shutil.copy(src,dst))

 1.1 复制文件

  复制文件常用的方法是shutil.copy(src,dst)和shutil.copy2(src,dst),这两者都可以将文件从一个文件夹复制到另一个文件夹,并且在可以在重命名复制后的文件名。这两个函数的入参都是一样的,其中src表示待复制文件的路径,dst可以是复制到的目标文件夹路径,也可以是目标文件路径(此时就可以执行重命名操作了)。下面展示了两个可能出现的常用场景以及其结果。

① 将文件复制到,已存在的目标文件夹

import shutil

shutil.copy("./待复制文件夹/待复制文件.txt", "./复制目标文件夹")

  执行后"待复制文件.txt"就会被复制到目标文件夹中,但需要注意这里的目标文件夹一定是存在的,如果目标文件夹不存在,则会被视为文件名,从而被程序视为一个文件复制到另一个文件。例如下例子:

import shutil

# 复制到不存在的文件夹
shutil.copy("./待复制文件夹/待复制文件.txt", "./不存在的目标文件夹")

  执行上述代码后,会在我当前根目录下生成一个"不存在的目标文件夹"的文件,这样显然不是我们所想要的,因此我们在使用copy将文件复制到另一个文件夹时要保证文件夹存在。

② 将文件复制到指定位置并改变文件名称

  我们可以在复制文件同时更改文件的名称(上面的例子中已经接触到了)

import shutil

# 复制文件到目标文件夹并改名
shutil.copy("./待复制文件夹/待复制文件.txt", "./复制目标文件夹/新文件名.txt")

  得到结果就是:

  注意:如果在目标路径下已经存在了一个同名的文件,那么将会被覆盖。

 1.2 复制文件夹

  与复制文件类似,不过由于是复制文件夹因此我们需要使用地递归复制(因为文件夹中可能还有子文件夹),因此使用shutil.copytree()

import shutil

# 递归复制文件夹
shutil.copytree("./待复制文件夹", "./复制目标文件夹2")

   需要注意的是如果目标文件夹不能是已经存在的文件夹,比如如果我的目标文件夹是"./复制目标文件夹",就会抛出异常: FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: './复制目标文件夹 

 2、移动文件/文件夹(shutil.move(src, dst))

  移动文件/文件夹的方法比较简单,需要提到的是在移动时我们仍然可以对文件/文件夹重名,比如下例:

import shutil

# 移动到目标文件夹
shutil.move("./待移动文件夹/待移动文件.txt", "./目标文件夹/移动后改名.txt")

   移动文件夹也是类似,下面的例子我把"待移动文件夹"移动到了./目标文件夹中成为其子文件夹了

# 移动文件夹
shutil.move("./待移动文件夹", "./目标文件夹")

  如果目标文件夹不存在,它将被创建(此时就可以为这个新文件夹重新命名了)
# 移动文件夹
shutil.move("./待移动文件夹", "./目标文件夹2")

 3、删除文件夹(shutil.rmtree(src))

   递归删除文件夹,注意这个方法只能删除文件夹,如果传入的路径不是文件夹则会抛出异常: NotADirectoryError: [WinError 267] 目录名称无效。: './待删除文件.txt'

# 删除文件夹
shutil.rmtree("./待删除夹")

  如果要删除文件推荐使用: os.remove()

4、压缩文件(shutil.make_archive(base_name, format, root_dir))

  • base_name:压缩包的名称,不包括后缀名。例如,如果base_name为example,则生成的归档文件名为example.zip(如果format为"zip")。
  • format:压缩文件的格式,可以是"zip"、"tar"、"gztar"或`"bztar"`中的一个。分别表示zip格式、tar格式、gzip压缩的tar格式和bzip2压缩的tar格式。
  • root_dir:要归档的目录的路径。

  例如下面的例子:

# 压缩文件
shutil.make_archive("./压缩后命名", "zip", "./待压缩文件夹")

  得到的结果:

4、解压文件(shutil.unpack_archive(filename, extract_dir, format))

  • filename:压缩包文件的所在的路径
  • extract_dir:解包后文件的存放目录,如果 `extract_dir` 没有指定,则默认解包到当前工作目录下。
  • format 是归档文件的格式。
# 解压文件
shutil.unpack_archive("./压缩后命名.zip", "./解压后文件夹")

  

 

参考链接

Python模块——shutil模块详解_shutils-CSDN博客

python之shutil模块11个常用函数详解 - 知乎 (zhihu.com)

python操作文件,强大的shutil模块 - 简书 (jianshu.com)

 

标签:文件,移动,Python,目标,文件夹,复制,shutil
From: https://www.cnblogs.com/CircleWang/p/18033934

相关文章

  • matlab和python语法方面的差异
    同为脚本语言,matlab和python在算法优化过程中都不可避免的会涉及到,甚至有些情况下会涉及到两种语言程序的互相转换,这几天我刚好也做了相关工作,需要将之前用matlab写的一个小算法模块转换成python,以方便和模型集成,过程不难,但因为需要同时涉及两种语言的书写风格,并且这两种语音在某......
  • Python + Apollo 实现配置中心
    --coding:utf-8--importjsonimportosimportthreadingimporttimefromdatetimeimportdatetime,timedeltafromtypingimportOptionalimportrequestsimportLogConfigasloggingclassApolloClient(object):definit(self,app_id,cluster='defaul......
  • 简化 Python 日志管理:Loguru 入门指南
    简化Python日志管理:Loguru入门指南在开发和维护软件项目时,高效的日志管理系统对于监控应用程序的行为、调试代码和追踪异常至关重要。Python的标准日志模块虽然功能强大,但其配置和使用往往较为复杂,尤其是对于新手开发者。这就是Loguru库发挥作用的地方,它以极简的方式重新定......
  • Python中字典setdefault()方法和append()的配合使用
    1.setdefault()方法语法dict.setdefault(key,default=None)说明:如果字典中包含给定的键值,那么返回该键对应的值。否则,则返回给定的默认值。Syntax:dict.setdefault(key,default_value)Parameters:Ittakestwoparameters:key–Keytobesearchedinthedictionar......
  • Python报错symbol lookup error: xxx.so: undefined symbol: cufftxxx解决办法
    技术背景在上一篇文章中介绍过如何实现本地MindSpore的CUDA算子,那么在算子编译和使用的过程中可能会出现一些小问题,这里介绍的是编译成功为so动态链接库之后,在python中调用,提示找不到xxx函数/字符的报错。这里使用的编译指令为:$nvcc--shared-Xcompiler-fPIC-oxxx.soxxx.c......
  • Python嵌套绘图并为条形图添加自定义标注
    论文绘图时经常需要多图嵌套,正好最近绘图用到了,记录一下使用Python实现多图嵌套的过程。首先,实现Seaborn分别绘制折线图和柱状图。'''绘制折线图'''importseabornassnsimportmatplotlib.pyplotaspltimportwarningswarnings.filterwarnings("ignore","use_inf_as_n......
  • Python函数每日一讲29 - 一文让你彻底掌握Python中的getattr函数
    引言在Python中,getattr()函数是一种强大的工具,它允许我们在运行时动态地访问对象的属性和方法。本文将介绍getattr()函数的基本语法、常见用法和高级技巧,帮助大家更好地理解和应用这一函数。语句概览getattr()函数的语法如下:getattr(object,name[,default])其中:ob......
  • Python Django适配dm8(达梦)数据库
    官方文档https://eco.dameng.com/document/dm/zh-cn/start/python-development.htmlDjango适配达梦https://blog.csdn.net/qq_35349982/article/details/132165581https://blog.csdn.net/weixin_61894388/article/details/126330168项目适配达梦升级或安装依赖Django==3......
  • Pydantic:强大的Python 数据验证库
    PydanticPydantic是一个在Python中用于数据验证和解析的第三方库。它提供了一种简单且直观的方式来定义数据模型,并使用这些模型对数据进行验证和转换。Pydantic的一些主要特性:类型注解:Pydantic使用类型注解来定义模型的字段类型。你可以使用Python内置的类型、自定义......
  • python如何将自定义目录添加到sys.path中,如何将自定义目录从sys.path中删除
    python如何将自定义目录添加到sys.path中,如何将自定义目录从sys.path中删除背景:在python脚本中,经常需要将自定义的包导入当前脚本,但该包并非pip安装,不在sys.path中,无法直接导入,所以需要临时导入自定义包;另外有时候将自定义的包永久写入了sys.path后,但实际又用不到该包,需要将自定......