Python 有强大的第三方模块, 这些第三方模块在实际运用中已经能实现很多的功能, 通常不需要重复开发具有相同功能的模块. 另外, Python 语言也内置了大量的模块, 这些模块已经非常完善, 例如对于常见的日期, 时间, 正则表达式, JSON 支持, 容器类等都有完善的模块. 接下来学习 Python 内置的模块, 不过这些模块还在不断的更新中, 更详细的模块帮助可查看 Python 库的在线参考手册, https://docs.python.org/3/library/index.html.
一, sys 模块
sys 模块代表的是 Python 解释器, 主要用于获取和 Python 解释器相关的信息. 在 Python 交互式解释器 (命令行) 中导入 sys 模块, 可查看该模块提供的程序单元, 注意该模块没有 __all__ 变量, 示例如下:
- >>> import sys
- >>> [s for s in dir(sys) if not s.startswith('_')]
- ['api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
- 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info',
- 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks',
- 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors',
- 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval',
- 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing',
- 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform',
- 'prefix', 'ps1', 'ps2', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile',
- 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version',
- 'version_info', 'warnoptions', 'winver']
上面输出了 sys 模块所包含的全部程序单元(包括变量, 函数等), 这些程序单元不需要全部记下来, 在实际使用中, 用到哪些模块就去查阅其对应的说明文档和参考手机即可. sys 模块的在线参考是 https://docs.python.org/3/library/sys.html.
下面来了解下 sys 模块中常用的属性和函数.
(1),sys.argv: 获取运行 Python 程序的命令行参数. sys.argv[0] 是当前 Python 程序(文件),sys.argv[1] 是为 Python 程序提供的第一个参数, sys.argv[2] 是第二个参数,...... 以此类推.
(2),sys.byteorder: 显示本地字节序的指示符. 如果本地字节是大端模式, 则该模块返回 big; 否则返回 little.
(3),sys.copyright: 该属性返回与 Python 解释器有关的版权信息.
(4),sys.executable: 该属性返回 Python 解释器在磁盘上存储路径.
(5),sys.exit(): 通过引发 SystemExit 异常来退出程序. 将其放在 try 块中不能阻止 finally 块的执行.
(6),sys.flags: 该只读属性返回运行 Python 命令时指定的旗标.
(7),sys.getfilesystemencoding(): 返回在当前系统中保存文件所有的字符集, 如 utf-8,gbk 等.
(8),sys.getrefcount(object): 返回指定对象的引用计数. 当 object 对象的引用计数为 0 时, 系统会回收该对象.
(9),sys.getrecursionlimit(): 返回 Python 解释器当前支持的递归深度(默认是 1000). 该属性可通过 setrecursionlimit() 方法重新设置.
(10),sys.getswitchinterval(): 返回当前 Python 解释器中线程切换的时间间隔(默认 0.005). 可通过 setswitchinterval() 函数改变.
(11),sys.implementation: 返回当前 Python 解释器的实现.
(12),sys.maxsize: 返回 Python 整数支持的最大值. 在 32 位平台上是 2**32-1,64 位平台上是 2**63-1
(13),sys.modules: 返回模块名和载入模块对应关系的字典.
(14),sys.path: 该属性指定 Python 查找模块的路径列表. 在程序中可通过修改该属性来动态增加 Python 加载模块的路径.
(15),sys.platform: 返回 Python 解释器所在平台的标识符, Windows 平台上的值是 "win32".
(16),sys.stdin: 返回系统的标准输入流, 一个类文件对象.
(17),sys.stdout: 返回系统的标准输出流, 一个类文件对象.
(18),sys.stderr: 返回系统的错误输出流, 一个类文件对象.
(19),sys.version: 返回当前 Python 解释器的版本信息.
(20),sys.winver: 返回当前 Python 解释器的主版本号.
sys 模块的部分功能使用示例如下:
- import sys
- # 显示本地字节序的指标符
- print(sys.byteorder) # little
- # 显示与 Python 解释器有关的版权信息
- print(sys.copyright)
- # 返回 Python 解释器在磁盘上的存储路径
- print(sys.executable)
- # 显示在当前系统中保存文件用的字符集
- print(sys.getfilesystemencoding()) # utf-8
- # 显示 Python 支持的最大整数
- print(sys.maxsize)
- # 显示 Python 解释器所在平台
- print(sys.platform) # win32
- # 显示 Python 解释器的版本信息
- print(sys.version) # 3.6.5 ......
- # 返回当前 Python 解释器的主版本号
- print(sys.winver) # 3.6
运行上面代码, 输出如下所示:
- little
- Copyright (c) 2001-2018 Python Software Foundation.
- All Rights Reserved.
- Copyright (c) 2000 BeOpen.com.
- All Rights Reserved.
- Copyright (c) 1995-2001 Corporation for National Research Initiatives.
- All Rights Reserved.
- Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
- All Rights Reserved.
- C:\ProgramData\Anaconda3\python.exe
- utf-8
- 9223372036854775807
- win32
- 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]
- 3.6
1, 获取运行参数
sys 模块的 argv 属性可以获取运行 Python 文件的命令行参数, argv 属性值是一个列表, argv[0] 是 Python 文件名称, argv[1] 是 argv 列表的第二个元素, 也是运行 Python 文件的第一个参数. 对应的, argv[2] 是第二个参数,.......
下面用示例对 argv 参数作更进一步的说明, 现在新建一个 argv_test.py 文件, 该文件的代码如下所示:
- from sys import argv
- # 输出 argv 列表的长度
- print("argv 列表长度是:", len(argv))
- # 遍历 argv 列表的每一个元素
- for arg in argv:
- print(arg)
这段代码中输出了 argv 列表的长度, 以及 argv 列表的每一个元素, 在命令行运行的结果如下所示:
命令行命令: python argv_test.py
输出信息是:
argv 列表长度是: 1
argv_test.py
从输出可以看到, argv 列表的长度是 1,argv 的第一个元素就是 Python 源文件 "argv_test.py". 下面继续在命令行下运行:
命令行命令: python argv_test.py hello world
输出信息是:
argv 列表长度是: 3
argv_test.py
hello
world
这次运行的时候在 Python 源文件 "argv_test.py" 后面增加了两个参数 "hello world", 从输出可以看出此次的列表长度是 3, 从这次的运行也可看出, 在命令行运行时, 参数之间默认以空格作为分隔符, 如果参数本身包含有空格, 则需要将参数用双引号 ("") 括起来, 明确表示是一个参数, 例如下面运行命令所示:
命令行命令: python argv_test.py "hello world"
输出信息是:
argv 列表长度是: 2
argv_test.py
hello world
从输出可知, 此次的 argv 列表长度是 2,hello world 也被看作是一个参数. 如果命令行的双引号改为单引号, 不会将 hello world 看做是一个参数.
2, 动态修改模块加载路径
sys 模块的 path 属性可实现动态改变 Python 模块的加载路径, 前提是路径要先创建好. 由于 sys.path 的属性值是列表, 可以直接使用列表的 append() 方法将要动态加载的路径添加即可, 示例如下:
- import sys
- # 动态添加 e:\mypymodule 路径作为模块的加载路径
- sys.path.append('e:\\mypymodule')
- # 加载 e:\mypymodule 路径下的 hello 模块
- import hello
上面这段代码要能成功运行, 需要在 E 盘下创建 mypymodule 目录, 并在该目录下创建 hello.py 模块文件.
二, os 模块
os 模块是与操作系统有关的模块, 用于获取运行程序时所在的操作系统相关信息. 在 Python 交互式解释器中导入 os 模块, 可用 os.__all__ 命令查看该模块的公开接口, 包括全部的属性和函数. 该模块的属性和函数有很多, 只需要掌握常用的属性和函数即可. 该模块的官方参考网站是 https://docs.python.org/3/library/os.html. 下面是 os 模块常用的属性和函数.
(1),os.name: 返回导入依赖模块的操作系统名称, 通常可返回'posix','nt','java'等值之一.
(2),os.environ: 返回在当前系统上所有环境变量组成的字典.
(3),os.fsencode(filename): 该函数对类路径 (path-like) 的文件名进行编码.
(4),os.fsdecode(filename): 该函数对类路径 (path-like) 的文件名进行解码.
(5),PathLike: 这是一个类, 代表一个类路径 (path-like) 对象.
(6),os.getenv(key, default=None): 获取指定环境变量的值.
(7),os.getlogin(): 返回当前系统的登录用户名. 与该函数对应的还有 os.getuid(),os.getgroups(),os.getgid()等函数, 用于获取用户 ID, 用户组, 组 ID 等, 这些函数通常只在 UNIX 系统上有效.
(8),os.getpid(): 获取当前进程 ID.
(9),os.getppid(): 获取当前进程的父进程 ID.
(10),os.putenv(key,value): 该函数用于设置环境变量.
(11),os.cpu_count(): 返回当前系统的 CPU 数量.
(12),os.sep: 返回路径分隔符.
(13),os.pathsep: 返回当前系统上多条路径之间的分隔符. 在 Windows 上是英文分号(;); 在 UNIX 及类 UNIX 系统上是英文冒号(:).
(14),os.linesep: 返回当前系统的换行符. 在 Windows 上是 "\r\n"; 在 UNIX 系统上是 "\n"; 在 Mac OS X 上是 "\r".
(15),os.urandom(size): 返回适合作为加密使用的, 最多由 size 个字节组成的 bytes 对象. 该函数通过操作系统特定的随机性来源返回随机字节, 该随机字节通常是不可预测的, 适用于大部分加密场景.
os 模块的部分函数用法示例如下:
- import os
- # 显示导入依赖模块的操作系统名称
- print(os.name) # nt
- # 获取 PYTHONPATH 环境变量的值
- print(os.getenv('PYTHONPATH')) # .;e:\mypymodule
- # 返回当前系统的登录用户名
- print(os.getlogin()) # michael
- # 获取当前进程 ID
- print(os.getpid())
- # 获取当前进程的父进程 ID
- print(os.getppid())
- # 返回当前系统的 CPU 数量
- print(os.cpu_count()) # 4
- # 返回路径分隔符
- print(os.sep) # # 返回当前系统的多条路径分隔符
- print(os.pathsep) # ;
- # 返回当前系统的换行符
- print(os.linesep) # \r\n
- # 返回适合作为加密使用的, 最多由 5 个字节组成的 bytes 对象
- print(os.urandom(5)) # b'v\xc9!\x11*'
运行代码, 输出如下:
- nt
- .;e:\mypymodule
- michael
- 1832
- 10072
- 4
- ;
- b'v\xc9!\x11*'
从输出可知, 在 Windows 系统上 Python 导入依赖模块的操作系统名称是 "nt"; 当前系统的登录用户名 michael; 当前进程 ID 是 1832; 当前进程的父进程 ID 是 10072; 当前系统上是有 4 个 CPU; 当前系统的路径分隔符是 "\"; 当前系统上多条路径的分隔符是分号(;); 当前系统上是换行符是 "\r\n"(输出的时候转换成了两个空行).
os 模块还有与操作文件与目录的功能函数, 这些在后面部分学习. os 模块下还包含有进程管理函数, 可用于启动新进程, 中止已有进程等. os 模块与进程管理相关的函数如下:
(1),os.abort(): 生成一个 SIGABRT 信号给当前进程. 在 UNIX 系统上, 默认行为是生成内核转储; 在 Windows 系统上, 进程立即返回退出代码 3.
(2),os.execl(path,arg0,arg1,...): 该函数还有一系统功能类似的函数, 比如 os.execle(),os.execlp()等, 这些函数都是使用参数列表 arg0,arg1,... 来执行 path 所代表的执行文件的.
注意: os.exec*() 函数都是 POSIX 系统的直接映射, 因此如果使用该命令来执行 Python 程序, 传入的 arg0 参数没有什么作用. os._exit(n) 用于强制退出 Python 解释器. 将其放在 try 块中可阻止 finally 块的执行.
(3),os.forkpty():fork 一个子进程.
(4),os.kill(pid,sig): 将 sig 信号发送到 pid 对应的进程, 用于结束该进程.
(5),os.killpg(pgid,sig): 将 sig 信号发送到 pgid 对应的进程组.
(6),os.popen(cmd,mode='r',buffering=-1): 用于向 cmd 命令打开读写管道(当 mode 为 r 时为只读管道, 当 mode 为 rw 时为读写管道),buffering 缓冲参数与内置的 open() 函数有相同的含义. 该函数返回的文件对象用于读写字符串, 而不是字节.
(7),os.spawnl(mode,path,...): 该函数还有一系列功能类似的函数, 比如 os.spawnle(),os.spawnlp()等, 这些函数用于在新进程中执行新程序.
(8),os.startfile(path[,openation]): 对指定文件使用该文件关联的工具执行 openration 对应的操作. 如果不指定 openration 操作, 则默认执行打开 (open) 操作. openration 参数必须是有效的命令行操作项目, 比如 open(打开),edit(编辑),print(打印)等.
(9),os.system(command): 运行操作系统上的指定命令.
os 模块中与进程管理相关的函数的功能示例如下:
- import os, sys
- # 运行平台上的 cmd 命令
- # os.system('cmd')
- # 使用 Excel 打开 e:\abc.xlsx 文件
- os.startfile('e:\abc.xlsx')
- os.spawnl(os.P_NOWAIT, r'C:\Program Files (x86)\Geany\bin\geany.exe', ' ')
- # 使用 Python 命令执行 sys_test.py 文件
- path = sys.executable
- os.execl(path, "",'sys_test.py','i')
使用代码编辑工具直接运行上面代码时, 可以看到程序运行后使用 Excel 打开了 abc.xlsx 文件, 也打开 Geany 工具, 还使用 python 命令运行了 sys_test.py 文件. 如果将 os.system('cmd') 这行代码取消注释, 将看到程序运行后只是启动了 cmd 命令行程序, 这是因为使用 os.system() 函数来运行程序时, 新程序所在的进程会替代原有的进程.
注意: 使用 os.execl() 函数运行新进程后, 也会取代原有进程, 因此上面代码中将这行代码放在了最后.
part10-1 Python 常见模块(sys 模块, os 模块)
来源: http://www.bubuko.com/infodetail-3368014.html