共计 6671 个字符,预计需要花费 17 分钟才能阅读完成。
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']
内容太多,通过截图查阅比拟清晰。
这些函数次要分为几类。
- 门路操作:
os.path
子库,解决文件门路及信息; - 过程治理:启动零碎中其它程序;
- 环境参数:取得零碎软硬件信息等环境参数。
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 文件名,1
、2
、3
是后缀的参数。
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.stdout
,sys.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 的魅力所在,心愿对你有所帮忙。