Python 的内置模块

在 Python 的标准库中,有哪些你常用并且觉得犀利无比的模块?

不要说 time、datetime、os、sys,这些模块常用是常用,但是逼格不够高啊。

举个例子,如果你经常在 LeetCode 上刷题,你会发现有时 Java、C 需要几十行的算法题,如果 Python 使用了 collections、itertools,可能只需要 3、4 代码就完成了!

shutil 的便利

日常的编码中,常会涉及到对文件、目录等的操作场景,如果我们使用 os,可能需要对文件、文件夹,非空等进行逐个判断。

举个例子: 我们现在要删除一个目录,目录中包含有文件与文件夹,如果使用 os 模块,没有现成可以使用的函数,需要我们进行判断与分类执行。

import os# path是文件的路径,如果这个路径是一个文件夹,# 则会抛出OSError的错误,这时需用用rmdir()来删除os.remove(path)# path是文件夹路径,注意文件夹需空的才能被删除os.rmdir(path)

多数初学者遇到删除文件夹,想到的操作就是,创建两个列表,然后用 os.walk 遍历目录,将文件与文件夹分别存入初始化的两个列表中,然后先统一删除文件,最后删除文件夹。

如果有上面这样操作的同学,请面壁三分钟。明显没有好好学习 os.walk 函数

os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]) top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。

onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。

followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

只需要将 topdown 设置为 False,这样在遍历目录时,就会从根节点进行遍历,然后我们逐个删除就 ok 了,哪里需要那么麻烦!

代码如下:

import os

for root, dirs, files in os.walk('D:\\software_temp', topdown=False):    for name in files:        os.remove(os.path.join(root, name))    for name in dirs:        os.rmdir(os.path.join(root, name))

说这么多,无外乎为了引出最简便的方式 : shutil 模块

如果换做 shutil 模块登场,那么执行删除目录的操作,只需要 0.1 秒的时间

import shutilshutil.rmtree('D:\\software_temp')

就这样,完事儿了...

文件解压缩

日常工作中,我们经常会使用 Python 进行文件的解压缩处理。

Python 自带的解压缩模块有 zipfile, gzip, tarfile,如果我们需要解压 rar 文件则需要单独下载 rarfile 模块,针对每一种压缩文件,我们都需要针对文件类型进行对应模块的使用

是不是很繁琐?如果我们使用 shutil 呢?让我们先来看看 shutil 支持的解压类型:

import pprintimport shutilpprint.pprint(shutil.get_unpack_formats())

output:[('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"), ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"), ('tar', ['.tar'], 'uncompressed tar file'), ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"), ('zip', ['.zip'], 'ZIP file')]

shutil 已经包含了我们上面提到的所有文件。

.7z 文件是什么鬼?

众所周知,zip 的压缩率相比 rar 是比较低的,但是商业软件下载中,你很少会见到 .rar 的文件,why?因为专利啊...

RAR是一种专利文件格式,用于数据压缩与归档打包,开发者为尤金·罗谢尔(俄语:Евгений Лазаревич Рошал,拉丁转写:Yevgeny Lazarevich Roshal),RAR的全名是“Roshal ARchive”,即“罗谢尔的归档”之意。首个公开版本RAR 1.3发布于1993年。

所以,有很多产品在软件发布时,开始使用一种压缩率更高的 .7z 文件,这又是为什么?

7-zip 官方主页:

https://sparanoid.com/lab/7z/

在其中有一个许可协议是这样写的

许可协议:

7-Zip 是一款 开源 软件。大多数源代码都基于 GNU LGPL 许可协议下发布。AES 代码基于 BSD 许可下发布。unRAR 代码基于两种许可:GNU LGPL 和 unRAR 限制许可。更多下许可信息请查看:7-Zip 许可。您可以在任何一台计算机上使用 7-Zip ,包括用在商业用途的计算机,不对 7-Zip 进行捐赠或支付并不影响您的使用。

shutil 扩展 7z

说了这么多 7z 文件的好处,可我们看到shutil并不能解压该类型的文件啊。

我们能否让 shutil 支持 .7z 文件,达到无脑解压缩呢?

此时,你需要 py7zr 模块,养成好习惯,遇到模块先找 GitHub

https://github.com/miurahr/py7zr

1. 模块下载

pip install py7zr

2. 基本使用

当我们安装好 py7zr 后,它可以在 cmd 下直接运行该命令

List archive contents$ py7zr l test.7zExtract archive$ py7zr x test.7zExtract archive with password$ py7zr x -P test.7z  password?: ****Create and compress to archive$ py7zr c target.7z test_dirCreate multi-volume archive$ py7zr c -v 500k target.7z test_dirTest archive$ py7zr t test.7zShow information$ py7zr iShow version$ py7zr --version

单独使用模块

import py7zr

archive = py7zr.SevenZipFile('sample.7z', mode='r')archive.extractall(path="/tmp")archive.close()

with py7zr.SevenZipFile('target.7z', 'w') as z:    z.writeall('./base_dir')
3. shutil 集成

之所以推荐 py7zr 给大家,不仅因为他的简单好用,更是由于他可以轻松集成于 shutil,来看看它的使用方式吧:

from py7zr import pack_7zarchvie, unpack_7zarchiveimport shutil

# register file format at first.shutil.register_archive_format('7zip',                               pack_7zarchive,                               description='7zip archive')

shutil.register_unpack_format('7zip',                              ['.7z'],                              unpack_7zarchive,                              description='7zip archive')

# extractionshutil.unpack_archive('test.7z', '/tmp')

# compressionshutil.make_archive('target', '7zip', 'src')

pprint.pprint(shutil.get_unpack_formats())

# output:[('7zip', ['.7z'], '7zip archive'), ('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"), ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"), ('tar', ['.tar'], 'uncompressed tar file'), ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"), ('zip', ['.zip'], 'ZIP file')]

通过注册我们看到,shutil 已经支持 7z 文件的解压了,就是如此简单

leetcode 解压缩_谁说 Python 的 shutil 不支持 7z 解压缩,我来教你扩展它的功能!...相关推荐

  1. 谁说Python的shutil不支持7z解压缩,我来教你扩展它的功能!

    python的内置模块 在Python的标准库中,有哪些你常用并且觉得犀利无比的模块?不要说time.datetime.os.sys.这些模块常用是常用,但是逼格不够高啊.举个例子,如果你经常在Lee ...

  2. python数据库模糊查询_原创:Python编写通讯录,支持模糊查询,利用数据库存储...

    1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询. 2.实现功能 可通过输入指令进行操作. (1)首先输入"add& ...

  3. python 相关性检验怎么计算p值_不会Python进行时间序列预测?不要紧,大神来教你...

    作者:Leandro Rabelo译者:李洁整理:Lemonbit本文内容较长,较为详细的阐述了进行时间序列预测的步骤,有些内容可能暂时用不到或者看不懂,但不要紧,知道有这么一个概念,后续碰到的时候, ...

  4. python shutil_Python3 shutil(高级文件操作模块)

    1.shutil是shell utility的缩写 shutil.move直接从一个地方挪到另一个地方,而os.rename常常只能重命名,不能挪动位置. 功能是:>>>shutil ...

  5. Python的shutil模块解析

    目录 前言 一.文件复制 1. shutil.copy(src, dst) 2. shutil.copyfile(src, dst) 3. shutil.copy2(src, dst) 4. shut ...

  6. 计算机编程导论python程序设计答案-学堂在线_计算机科学与Python编程导论_作业课后答案...

    学堂在线_计算机科学与Python编程导论_作业课后答案 答案: 更多相关问题 近代中国完全沦为半殖民地半封建社会的标志是:A.<马关条约>B.<辛丑条约>C.<凡尔赛和 ...

  7. LeetCode 59 _ Sprial Matrix II 旋转矩阵2

    Description: Given a positive integer n, generate a square matrix filled with elements from 1 to n2  ...

  8. python语法详解大全_笔记:Python 语法要点汇总

    Python 是一门解释型语言,无需编译和链接 Python 解释器 交互模式 脚本模式 源码编码 默认情况下,Python 源文件是 UTF-8 编码 指定源文件的字符编码 # -*- coding ...

  9. python 通过shutil.move移动图片出错xe5\xb8\xb8\xe7

    python 通过shutil.move移动图片,报错 IOError: [Errno 2] No such file or directory: '/home/a/photo\xe5\xb8\xb. ...

最新文章

  1. 星巴克和阿里“结婚”,这后面真的不简单
  2. 漫画:什么是二分查找
  3. 【Discuz】云平台服务:出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常
  4. 万维网源代码正在被发明人拍卖,有人出价1800万,还在不断上涨
  5. 学会JavaScript函数式编程(第1部分)
  6. frida 安装特定版本
  7. mysql insert插入的3种方法
  8. 云图说|AI开发难!难!难!端云协同多模态AI开发套件你需要了解一下
  9. 二级域名的URL跳转
  10. 最简单的视音频播放示例1:总述
  11. IBatisNet初步体验
  12. 经典怀旧软件----PP点点通
  13. 【Qt+ OpenGL】实现人体3D显示与控制
  14. mysql建数据库实例_MySQL数据库基础(四)——MySQL数据库创建实例
  15. 二叉搜索树的删除操作详解,图文并茂,化繁为简
  16. 江苏大学计算机学院在职研究生,江苏大学电子与通信工程在职研究生招生简章...
  17. Linux 虚拟内存管理思维导图
  18. Python办公自动化 | Task 01 文件自动化处理邮件批量处理
  19. 迪士尼机器人芭蕾舞_迪士尼公园只有卡通公主?内含大量惊人科技感机器人
  20. 网页上显示word和Excel

热门文章

  1. QT学习之图形视图框架
  2. c/c++中的const
  3. java 解释型和编译型
  4. ideal如何创建dynamic web project
  5. tf.reduce_sum()函数
  6. TensorFlow指定使用GPU 多块gpu
  7. 手把手从零开始搭建k8s集群超详细教程
  8. GPU自动调度卷积层
  9. Python分析离散心率信号(下)
  10. CUDA运行时 Runtime(四)