Python之第九章 组织文件

2023-11-11

一、shutil模块

shutil (或称为 shell 工具)模块中包含一些函数,让你在 Python 程序中复制、 移动、改名和删除文件。要使用 shutil 的函数,首先需要 import shutil

1、复制文件和文件夹

>>> import shutil, 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'
shutil.copy(source, destination)
1、将第一个参数复制到第二个参数处
2、如果第二个参数是个文件名,则重命名为第二个参数
3、返回的是复制过去后的路径

shutil.copytree()复制整个文件夹,还有文件夹内的所有东西。

shutil.copytree(source, destination) ,将路径 source 处的文件夹,包括它的所有文件和子文件夹,复制到路径 destination 处的文件夹。
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'

1、如果文件夹不存在,则会新建一个文件夹

2、文件和文件夹的移动与改名

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

注意:如果eggs文件夹中存在bacon.txt文件,则原来的文件就会被覆盖,所以需要注意。

shutil.move()方法和Linux中的mv方法一样,还可以重命名。

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

注意:构成目的地的文件夹必须已经存在,否则 Python 会抛出异常。

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
 File "C:\Python34\lib\shutil.py", line 521, in move
 os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
 File "<pyshell#29>", line 1, in <module>
 shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
 File "C:\Python34\lib\shutil.py", line 533, in move
 copy2(src, real_dst)
 File "C:\Python34\lib\shutil.py", line 244, in copy2
 copyfile(src, dst, follow_symlinks=follow_symlinks)
 File "C:\Python34\lib\shutil.py", line 108, in copyfile
 with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\ 
eggs\\ham'
Python does_not_exist 目录中寻找 eggs ham 。它没有找到不存在的目录, 所以不能将 spam.txt 移动到指定的路径

3、永久删除文件和文件夹

利用 os 模块中的函数,可以删除一个文件或一个空文件夹。
利用 shutil 模块, 可以删除一个文件夹及其所有的内容。
os.unlink(path) 将删除 path 处的文件。
调用 os.rmdir(path) 将删除 path 处的文件夹。该文件夹必须为空,其中没有任 何文件和文件夹。
调用 shutil.rmtree(path) 将删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除。
为了防止我们误删一些文件,我们可以将删除语句注释掉,用print打印出需要删除的文件,确认后再取消注释进行删除。

4、用send2trash模块安全地删除

shutil.rmtree()方法太狠,删除文件夹及内的所有文件与文件夹

因此诞生了比较温柔的第三方send2trash模块,它会将文件夹和文件发送到计算机的回收站,还是可以还原的。

import send2trash
baconFile=open('shy.txt','a')
baconFile.write('this is a text txt.')
baconFile.close()
send2trash.send2trash('shy.txt')

但是send2trash()方法不能释放磁盘空间,用os和shutil可以释放磁盘空间。

二、遍历目录树

os.walk()函数:可以遍历目录树

import os
for folderName, subfolders, filenames in os.walk('D:\\shy'):
    print('The current folder is ' + folderName)
    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)
        print('')

 os.walk()函数被传入一个字符串值,即一个文件夹的路径。你可以在一个 for 循环语句中使用os.walk()函数,遍历目录树,就像使用 range()函数遍历一个范围的数字一样。不像 range()os.walk()在循环的每次迭代中,返回 3 个值:

1.当前文件夹名称的字符串。

2.当前文件夹中子文件夹的字符串的列表。

3 .当前文件夹中文件的字符串的列表。
所谓当前文件夹,是指 for 循环当前迭代的文件夹。程序的当前工作目录,不会因为 os.walk() 而改变。

三、用zipfile模块压缩文件

1、读取zip文件

>>> import zipfile, os
>>> os.chdir('C:\\') # move to the folder with example.zip
>>> exampleZip = zipfile.ZipFile('example.zip')
>>> exampleZip.namelist()
['spam.txt', 'cats/', 'cats/catnames.txt', 'cats/zophie.jpg']
>>> spamInfo = exampleZip.getinfo('spam.txt')
>>> spamInfo.file_size
13908
>>> spamInfo.compress_size
3828
>>> 'Compressed file is %sx smaller!' % (round(spamInfo.file_size / spamInfo
.compress_size, 2))
'Compressed file is 3.63x smaller!'
>>> exampleZip.close()

 ZipFile对象的namelist()方法:返回zip文件内的文件夹和文件名称。

这些名称可以传递给ZipFile对象的getinfo()方法,返回一个关于特定对象的ZipInfo对象。

ZipInfo 对象有自己的属性,诸如表示字节数的 file_size 和 compress_size ,它们分别表示原来文件大小和压缩后文件大小。
ZipFile 对象表示整个归档文件,而 ZipInfo 对象则保存该归档文件中每个文件的有用信息。

2、从 ZIP 文件中解压缩

ZipFile对象的extractall()方法:解压缩。

>>> import zipfile, os
>>> os.chdir('C:\\') # move to the folder with example.zip
>>> exampleZip = zipfile.ZipFile('example.zip') # 使用zipfile模块的ZipFile()方法读取压缩文件,创建一个ZipFile文件对象。
>>> exampleZip.extractall() #调用ZipFile对象的extractall()方法,解压缩包
>>> exampleZip.close()
你可以向 extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作
目录。如果传递给 extractall() 方法的文件夹不存在,它会被创建。例如,如果你用exampleZip.extractall('C:\\ delicious')取代 处的调用,代码就会从 example.zip 中解压缩文件,放到新创建的 C:\delicious 文件夹中。

ZipFile对象的extract()方法:从zip文件中解压单个文件。

>>> exampleZip.extract('spam.txt') # 必须是namelist()中的一个
'C:\\spam.txt' 
>>> exampleZip.extract('spam.txt', 'C:\\some\\new\\folders')# 解压到指定文件夹中 如果不存在会创建它
'C:\\some\\new\\folders\\spam.txt' # 返回值是解压缩后文件的绝对路径
>>> exampleZip.close()

3、创建和添加到ZIP文件

>>> import zipfile
>>> newZip = zipfile.ZipFile('new.zip', 'w')
>>> newZip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED)
>>> newZip.close()

写模式打开ZipFile对象,即添加第二个参数‘w’

ZipFile对象的write()方法传入一个路径,会压缩该路径所致的文件,第二个参数是压缩类型。

w 会覆写  a 添加、追加

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python之第九章 组织文件 的相关文章

  • 是否有解决方法可以通过 CoinGecko API 安全检查?

    我在工作中运行我的代码 一切都很顺利 但在不同的网络 家庭 WiFi 上 我不断收到403访问时出错CoinGecko V3 API https www coingecko com api documentations v3 可以观察到 在
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • CS336视觉伺服

    笔记 动力学模型 机械臂动力学的研究方法 拉格朗日 牛顿 欧拉 高斯 凯恩方法 机械臂的动力学主要是两个问题 正向运动学和逆向运动学 视觉伺服 视觉伺服的基本思想 基于视觉的伺服控制方法的目的是最小化一个图像误差 该误差可以定义为 e t
  • Elasticsearch搜索系统线上部署配置规划

    问题导读 1 es安装包的目录结构是怎样的 2 zen discovery集群发现机制的设置规划及其原理是怎样的 3 es默认参数调优如何进行 1 ES部署须知1 1 包结构es安装包的目录结构大致如下 bin 存放es的一些可执行脚本 比
  • Python数据分析之股票数据

    最近股市比较火 我7月初上车了 现在已经下了 中间虽然吃了点肉 但下车的时候都亏进去了 最后连点汤都没喝着 这篇文章我们就用python对股票数据做个简单的分析 数据集是从1999年到2016年上海证券交易所的1095只股票 共1000个文
  • C++实现——排序算法总结

    常见的排序算法有 直接插入 希尔 冒泡 快速 选择 堆排序 归并 基数 下面一一分析 并实现 1 冒泡排序 冒泡排序是最简单的排序算法 冒泡排序的基本思想是从后往前 或从前往后 两两比较相邻元素的值 若为逆序 则交换它们 直到序列比较完毕
  • R语言做面板VAR例子

    面板VAR步骤 1 对各变量做平稳性检验 IPS PP ADF LLC等方法检验 是逐个变量检验 还是一起检验 2 面板数据的最优滞后阶数确定 AIC和SIC方法 3 在PVAR系统中进行Wald Granger检验 4 面板VAR估计 5
  • 蓝桥试题 算法训练 阶乘末尾0的个数(C++)

    资源限制 时间限制 1 0s 内存限制 256 0MB 题目 n 表示为n的阶乘 其中阶乘的定义是这样的 若n为0 则有n 0 1 若n为正整数 则有n n 1 n 例如4 4 3 2 1 24 可以发现阶乘这一运算的数值增长速度是非常快的
  • SpringFramework历史版本

    SpringFramework历史版本 对于Spring而言 迄今已有14年历史了 版本也到达了5 0 作为JavaWEB开发领域的常青树 现在Spirng已不再简单是一个框架了 在Spring的项目中主要有 SpringFramework
  • qt Example Manifest Files

    manifest file 是有qdoc根据example对应的 qdocconf qdoc文件生成的 主要用于在qtcreator 的欢迎 welcome gt 示例 examples 中辅助显示内容项 其文件格式为xml格式 后缀名为
  • hdu 1827 Summer Holiday 强连通分量缩点

    题目 http acm hdu edu cn showproblem php pid 1827 题意 听说lcy帮大家预定了新马泰7日游 Wiskey真是高兴的夜不能寐啊 他想着得快点把这消息告诉大家 虽然他手上有所有人的联系方式 但是一个
  • 使用docker搭建Hadoop

    Hadoop简介 1 Hadoop的整体框架 Hadoop由HDFS MapReduce HBase Hive和ZooKeeper等成员组成 其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS Hadoop Dist
  • MVC模式 &三层架构思想完成增删改查.

    MVC模式图解 三层架构图解 表现层 业务逻辑层 数据访问层互不干扰 也就是说比如我们表现层更改代码不会干涉到其他两层 com itheima web 这代表的是包名 也就是说最好把表现层或者业务逻辑层放到此对应的包名下 以后会用三大框架封
  • 2014年腾讯,百度,微软等校园招聘笔试题...

    腾讯2014年校园招聘笔试题 2014年阿里巴巴校招笔试题北京站 涉及C JAVA 数据结构
  • 基于SDF的抽骨架之散点图(Projected points)

    span style font family none background color rgb 255 255 255 1 SDF 形状直径函数 span span style font family none background co
  • element-ui表格实现跨页多选

    1 在type selection 的column中添加reserve selection属性 以保留当前所选数据
  • Arduino实验十八 旋转编码器实验

    学习任务 学会使用旋转编码器 关注微信公众号 爱享生活科技 color FF0000 关注微信公众号 爱享生活科技 关注微信公众号 爱享生活科技 组件 Arduion主板 旋转编码器 I2CLCD1602液晶显示器 杜邦线 面包板 下图是旋
  • JS base64与utf8相互转换

    utf8Url utf8编码字符串 let base64URL Buffer from utf8Url toString base64 base64UR base64编码字符串 let utf8Url Buffer from base64U
  • 李开复创业了

    上周五9月4日 一看新闻 头条就是 李开复离开Google 准备创业 等新闻 我吓了一跳 李开复作为全球一流企业的高管 居然都辞职不干了 记得李开复在大学生心目中一直都是导师的身份 他为我们写了7封信了 教导着中国的新生代怎么面对困难 积极
  • 基于Udacity模拟器的端到端自动驾驶决策

    1 端到端自动驾驶决策 端到端自动驾驶决策的输入为车辆的感知信息 如摄像头信息 输出为车辆的前轮转角和摄像头等信息 如上图所示 为英伟达公司的端到端自动驾驶决策框架 其CNN网络如下图所示 其中包括一个归一化层 5个卷积层和3个完全的全连接
  • oracle获取某一天某个时间点

    例如每个月12号18点时间 trunc add months last day FBizDate 1 12 18 24
  • Python之第九章 组织文件

    一 shutil模块 shutil 或称为 shell 工具 模块中包含一些函数 让你在 Python 程序中复制 移动 改名和删除文件 要使用 shutil 的函数 首先需要 import shutil 1 复制文件和文件夹 gt gt