热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

#抬抬小手学Python#os库、sys库、getopt库与filecmp库,5000字长文带你搞定四大库

#抬抬小手学Python#os库、sys库、getopt库与filecmp库,5000字长文带你搞定四大库-sys库、os库、getopt库与filecmp库os库在Python中
sys 库、os 库、 getopt 库 与 filecmp 库

os 库

在 Python 中 os 库提供了基本的操作系统交互功能,该库下包含大量与文件系统、操作系统相关的函数,通过 dir 函数可以查看。

['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']

内容太多,通过截图查阅比较清晰。

这些函数主要分为几类。

  1. 路径操作:os.path 子库,处理文件路径及信息;
  2. 进程管理:启动系统中其它程序;
  3. 环境参数:获得系统软硬件信息等环境参数。

os 库路径操作

os.path 在 os 库中用于提供操作和处理文件路径相关函数,常见的函数清单如下:

函数名简介
os.path.abspath(path)返回绝对路径
os.path.normpath(path)规范 path 字符串形式
os.path.realpath(path)返回 path 的真实路径
os.path.dirname(path)返回文件路径
os.path.basename(path)返回文件名
os.path.join(path1[, path2[, ...]])把目录和文件名合成一个路径
os.path.exists(path)如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
os.path.isfile(path)判断路径是否为文件
os.path.isdir(path)判断路径是否为目录
os.path.getatime(path)返回最近访问时间(浮点型秒数)
os.path.getmtime(path)返回最近文件修改时间
os.path.getsize(path)返回文件大小,如果文件不存在就返回错误

以上函数的使用过程比较容易理解,导入模块之后,调用即可。

模块导入使用下述方式:

import os.path
# import os.path as op
variate = os.path.abspath(__file__)
print(variate)

函数的参数都是 path,在传入的时候,特备要注意原生字符串的应用,还有要区分绝对路径和相对路径的问题。

由于 path 相关的库比较简单,每个内容都尝试一遍即可掌握,其它内容可以在 手册 进行学习。

os 库进程管理

该内容主要用于在 Python 中执行程序或命令 Command,函数原型为:

os.system(command)

例如,在 Python 中唤醒画板程序。

os.system("c:\windows/system32/mspaint.exe")

除了 system 函数以外,还有一个 os.exec 函数族相关知识。具体可以查看下述函数的用法:

os.execl(path, arg0, arg1, ...)
os.execle(path, arg0, arg1, ..., env)
os.execlp(file, arg0, arg1, ...)
os.execlpe(file, arg0, arg1, ..., env)
os.execv(path, args)
os.execve(path, args, env)
os.execvp(file, args)
os.execvpe(file, args, env)

这些函数都将执行一个新程序,以替换当前进程。

14.1.3 os 库运行环境相关参数

环境参数顾名思义就是改变系统环境信息,或者理解为 Python 运行环境相关信息。

通过下述属性,可以获取环境变量:

os.environ

如果希望获取操作系统类型,使用 os.name,目前只有 3 个值:分别是 posix , nt , java

函数部分,主要掌握的函数有:

  • os.chdir(path):修改当前程序操作的路径;
  • os.getcwd():返回程序运行的路径;
  • os.getlogin():获取当前登录用户名称;
  • os.cpu_count():获得当前系统的 CPU 数量;
  • os.urandom(n):返回一个有 n 个 byte 长的一个随机字符串,用于加密运算。

    sys 库

该库主要维护一些与 Python 解释器相关的参数变量和方法。

14.2.1 常见属性如下

sys.argv
获取命令行参数列表,第一个元素是程序本身。

使用方式如下:

import sys
print(sys.argv)

接下来通过控制台运行 python 程序时,需要携带参数,下述代码 312.py 是 python 文件名,123 是后缀的参数。

python 312.py 1 2 3

执行程序之后,得到的结果为:

['312.py', '1', '2', '3']

第一个是文件名,后面依次是传递进来的参数。

sys.platform
获取 Python 运行平台的信息,结果比 os.name 要准确。

sys.path
获取 PYTHONPATH 环境变量的值,一般用作模块搜索路径。

import sys
print(sys.path)

sys.modules
以字典的形式获取所有当前 Python 环境中已经导入的模块。

sys.stdin,sys.stdout,sys.stderr
sys.stdin , sys.stdoutsys.stderr 变量包含与标准 I/O 流对应的流对象。

import sys

# 标准输出, sys.stdout.write() 的形式就是 print() 不加'\n' 的形式。
sys.stdout.write("hello")
sys.stdout.write("world")

sys.stdin 标准输入,等价于 input

sys.ps1 和 sys.ps2
指定解释器的首要和次要提示符。仅当解释器处于交互模式时,它们才有定义。具体测试如下:

PS > python
Python 3.7.3 (v3.7.3:xxxxxx, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps1 = "***"
***print("hello")
hello

14.2.2 常见方法如下

sys.exit(n)
退出 Python 程序,exit(0)表示正常退出。
当参数非 0 时,会引发一个 SystemExit 异常,可以在程序中捕获该异常。参数也可以称为状态码。

sys.getdefaultencoding()、sys.setdefaultencoding() 、sys.getfilesystemencoding()

  • sys.getdefaultencoding():获取系统当前编码,有的博客中写默认为 ascii,但是我本地默认为 utf-8
  • sys.setdefaultencoding():设置系统的默认编码;
  • sys.getfilesystemencoding():获取文件系统使用编码方式,默认 utf-8

sys.getrecursionlimit() 、 sys.setrecursionlimit()
获取 Python 的最大递归数目和设置最大递归数目

sys.getswitchinterval()、sys.setswitchinterval(interval)
获取和设置解释器的线程切换间隔时间(单位为秒)

还有很多方法,也是记忆层面的知识,备注下备注下 官方手册 地址。

14.3 getopt 库

在控制台运行命令的时候,存在一种需求是传递参数,例如安装第三方模块,使用的命令是:

pip install xxxx -i http://xxxxxx

在 Python 中也可以实现类似的效果,getopt 库提供了解析命令行参数 sys.argv 的功能。

通过 dir 查看该库中提供的方法不多,具体如下:

'do_longs', 'do_shorts', 'error', 'getopt', 'gnu_getopt', 'long_has_args', 'os', 'short_has_arg'

重点函数是 getopt.getopt() 该函数原型如下:

getopt(args, shortopts, lOngopts=[])
  • args:程序的命令行参数,不包括程序文件名称,一般传递 sys.argv[1:]
  • shortopts:定义 -x 或者 -x <值> 形式的短参数,带值的增加 :,例如 xyz:m:,表示可解析 -x -y -z <值> -d <值> 的参数;
  • longopts:定义 --name--name <值> 形式的长参数,带值的增加 =

下面通过一个列表直接模拟 sys.argv 接收到的参数。

import getopt
import sys

sys.argv = ["demo.py", "-i", "-d", "baidu.com", "arg1"]

opts, args = getopt.getopt(sys.argv[1:], "id:")
print(opts)
print(args)

返回值由两个元素组成:第一个是 (option, value)对的列表;
第二个是在去除该选项列表后余下的程序参数列表(这也就是 args 的尾部切片)。

除了短参数以外,还有长参数,测试代码如下:

my_str = "demo.py -i -d baidu.com --name bai arg1"
sys.argv = my_str.split()
print(sys.argv)

opts, args = getopt.getopt(sys.argv[1:], "id:",["name="])
print(opts)
print(args)

运行代码之后,参数也成功的被解析了出来。

['demo.py', '-i', '-d', 'baidu.com', '--name', 'bai', 'arg1']
[('-i', ''), ('-d', 'baidu.com'), ('--name', 'bai')]
['arg1']

如果程序异常,会出现参数解析错误,异常类为 getopt.GetoptError

my_str = "demo.py -i -d baidu.com --name bai arg1"
sys.argv = my_str.split()
print(sys.argv)

opts, args = getopt.getopt(sys.argv[1:], "id:")
print(opts)
print(args)

该代码由于没有匹配长参数,出现错误为:

getopt.GetoptError: option --name not recognized

14.4 filecmp 库

该库用来提供比较目录和文件的功能。

文件比较函数有 cmp()cmpfiles()
目录比较使用 filecmp 库中的 dircmp 类。

14.4.1 filecmp.cmp()、filecmp.cmpfiles()

filecmp.cmp() 用于比较两个文件内容是否一致,如果文件内容匹配,函数返回 True,否则返回 False。

import filecmp
x = filecmp.cmp("312.py","312.py")
print(x)

filecmp.cmpfiles() 函数用于比较两个文件夹内指定文件是否相等。
函数原型如下:

filecmp.cmpfiles(dir1, dir2, common[, shallow])

参数 dir1, dir2 指定要比较的文件夹,参数 common 指定要比较的文件名列表
函数返回包含 3 个 list 元素的元组,分别表示匹配、不匹配以及错误的文件列表。
错误的文件指的是不存在的文件,或文件被琐定不可读,或没权限读文件,或者由于其他原因访问不了该文件。

测试代码如下:

import filecmp
x = filecmp.cmpfiles("../53","../54",["demo.py","demo1.py"])
print(x)

14.4.2 目录比较

主要看类的构造函数就可以了。

class filecmp.dircmp(a, b, ignore=None, hide=None)

参数说明如下:

  • a, b:目录;
  • ignore:关键字参数,需要忽略的文件名列表, 默认为 filecmp.DEFAULT_IGNORES
  • hide:关键字参数,需要隐藏的文件名列表, 默认为 [os.curdir, os.pardir]

使用 dircmp 生成一个比较对象之后,就可以获取各个属性值了。具体可以直接在这个网页进行查询。

14.5 这篇博客的总结

本篇博客学习了 Python 中 4 个常见库的基本使用,这些库的存在,使得 Python 编码效率大幅度的提升,很多时候,你无法解决的编程问题,都可以用 Python 内置的库快速解决,这也是 Python 的魅力所在 ,希望对你有所帮助。


推荐阅读
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
author-avatar
jing2502857803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有