Python标准库sys与os模块详解:函数用法、参数及实战示例
本文深入解析Python标准库中sys和os模块的核心功能。sys模块用于处理运行时配置及与解释器交互,涵盖参数传递、编码设置及标准流控制。os模块提供操作系统底层接口,详解文件增删改查、环境变量管理及路径处理函数。重点对比os.walk与os.path.walk在目录遍历中的差异,并通过代码实例展示Shell模拟及路径拼接技巧,帮助开发者高效进行系统级编程。
Python标准库sys
sys模块提供了一系列实用的服务,包含多种函数和变量,用于处理Python运行时的配置及资源,从而实现当前程序与外部系统环境(如Python解释器)的交互。
sys模块的常见函数列表(需先执行import sys):
| 函数 | 说明 |
|---|---|
| dir(sys) | dir()方法查看模块中可用的方法。注意:如果是在编辑器,一定要注意要事先声明代码的编码方式,否则中文会乱码。 |
| sys.argv | 实现从程序外部向程序传递参数 |
| sys.exit([arg]) | 程序中间的退出,arg=0为正常退出 |
| sys.getdefaultencoding() | 获取系统当前编码,一般默认为ascii |
| sys.setdefaultencoding() | 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行 |
| reload(sys), | 再执行setdefaultencoding(‘utf8'),将系统编码设置为utf8 |
| sys.getfilesystemencoding() | 获取文件系统编码方式,Windows下返回'mbcs',mac下返回'utf-8' |
| sys.path | 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到 |
| sys.platform | 获取当前系统平台。 |
| sys.stdin | sys.stdoutsys.stderr stdin,stdout,以及stderr变量包含与标准I/O流对应的流对象。如果需要更好地控制输出,而print不能满足要求,它们就是你所需要的。你也可以替换它们,重定向输出和输入到其它设备(device),或者以非标准的方式处理它们。 |
| sys.modules | 是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快程序运行的速度。它拥有字典所拥有的一切方法。 |
Python标准库os
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。
os模块的常见函数列表(需先执行import os):
函数及其说明如下:
os.environ:一个字典,包含环境变量的映射关系。
os.name:显示当前使用的操作系统平台名称。
os.sep:显示当前平台下的路径分隔符。
os.linesep:给出当前平台使用的行终止符。
os.remove('filename'):删除指定文件。
os.rename("oldname", "newname"):重命名文件。
os.getcwd():显示当前Python脚本的工作路径。
os.chdir(dir):改变当前目录。注意在Windows系统下使用路径时需处理转义字符。
os.listdir('dirname'):返回指定目录下的所有文件和目录名列表。
os.makedirs('dirname/dirname'):可生成多层递归目录。
os.rmdir('dirname'):删除单级空目录。
os.getlogin():获取当前用户登录名称。
os.getenv('key'):获取指定键名的环境变量配置。
os.putenv('key'):设置环境变量。
os.system():运行Shell命令。注意:该函数会打开一个新的Shell进程来运行命令,命令执行完毕后关闭该Shell。
操作举例:
os.mkdir('/tmp/xx'),os.system("echo'hello' > /tmp/xx/a.txt"),os.listdir('/tmp/xx')
os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt'),os.remove('/tmp/xx/b.txt'),os.rmdir('/tmp/xx')
使用Python编写一个简单的Shell模拟程序:
#!/usr/bin/python import os, sys cmd = sys.stdin.readline(); while cmd: os.system(cmd); cmd = sys.stdin.readline();
os.path子模块
函数及其说明如下:
os.path.abspath():获取绝对路径。例如:os.path.abspath("1.txt") 等价于 os.path.join(os.getcwd(), "1.txt")。
os.path.split():用于将一个目录名称拆分为目录部分和文件名部分。
os.pardir:表示当前平台下上一级目录的字符(通常为"..")。
os.path.join(path, name):连接目录路径和文件名。
os.path.basename(path):返回路径中的文件名部分。
os.path.dirname(path):返回路径中的目录部分。
os.path.getctime("/root/1.txt"):返回文件1.txt的ctime(创建时间)时间戳。
os.path.exists(os.getcwd()):判断指定路径的文件或目录是否存在。
os.path.isfile(os.getcwd()):判断路径是否为普通文件,返回1表示是,0表示否。
os.path.isdir('c:\Python\temp'):判断路径是否为目录,返回1表示是,0表示否。
os.path.islink('/home/111.sql'):判断路径是否为符号链接。注意:此功能在Windows系统下不可用。
os.path.ismount(os.getcwd()):判断路径是否为文件系统安装点(挂载点)。注意:此功能在Windows系统下不可用。
os.path.samefile(os.getcwd(), '/home'):判断两个路径是否指向同一个文件。
os.walk():能够遍历给定目录下的所有子目录和文件。
os.path.walk('/home/huaying', test_fun, "a.c"):遍历/home/huaying目录下的所有子目录(包括本目录),并对每个目录调用函数test_fun。
os.walk和os.path.walk的区别
函数声明:os.walk(top, topdown=True, onerror=None)
1、参数top表示需要遍历的顶级目录的路径。
2、参数topdown的默认值为"True",表示首先返回顶级目录下的文件,然后再遍历子目录中的文件。当topdown的值为"False"时,表示先遍历子目录中的文件,然后再返回顶级目录下的文件。
3、参数onerror默认值为"None",表示忽略文件遍历时的错误。如果不为空,则提供一个自定义函数,用于在出错时提示错误信息后继续遍历,或抛出异常中止遍历。
返回值:函数返回一个元组,包含三个元素。这三个元素分别是:每次遍历的路径名、路径下的子目录列表、目录下的文件列表。
函数声明:os.path.walk(top, func, arg)
1、参数top表示需要遍历的目录路径。
2、参数func表示回调函数,即对遍历路径进行处理的函数。所谓回调函数,是作为某个函数的参数使用,当某个事件触发时,程序将调用定义好的回调函数处理任务。注意:walk的回调函数必须提供三个参数:第1个参数为os.path.walk的参数arg,第2个参数表示目录dirname,第3个参数表示文件列表names。注意:os.path.walk的回调函数中的文件列表不和os.walk()那样将子目录和文件分开,而是混为一谈,需要在回调函数中判断是文件还是子目录。
3、参数arg是传递给回调函数的元组,为回调函数提供处理参数,arg可以为空。回调函数的第1个参数就是用来接收这个传入的元组的。
过程:以top为根的目录树中的每一个目录(包含top自身,如果它是一个目录),以参数(arg, dirname, names)调用回调函数func。参数dirname指定访问的目录,参数names列出在目录中的文件(从os.listdir(dirname)中得到)。回调函数可以修改names以改变dirname下面访问的目录设置,例如,避免访问树的某一部分。(由names关联的对象必须在合适的位置被修改,使用del或slice指派。)注意:符号链接到目录不被作为一个子目录处理,因此walk()将不访问它们。访问连接的目录必须以os.path.islink(file)和os.path.isdir(file)标识它们,并且必须调用walk()。
区别:os.path.walk()与os.walk()产生的文件名列表并不相同。os.walk()产生目录树下的目录路径和文件路径,而os.path.walk()只产生文件路径(是子目录与文件的混合列表)。
实例:
#coding=utf-8 importos # 当前平台上一级目录字符.. print(os.path.pardir) # os.path.abspath(__file__) :绝对路径 # 获取绝对路径(目录加当前文件名) print(os.path.abspath(__file__)) # os.path.split(os.getcwd()) 用于分开一个目录名称中的目录部分和文件名称部分。 # 获取绝对目录(没有文件名) print(os.getcwd()); print(os.path.split(os.path.abspath(__file__))[0]) # 目录 print(os.path.dirname(os.path.abspath(__file__)))# 等价于上一句 # 拼接文件目录和文件名 print(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.path.pardir) ) # 获取父目录 # 当前目录的路径名称,即父目录(os.path.dirname():显示当前路径,不会显示当前文件名) print(os.path.dirname(os.getcwd())); print(os.path.abspath(os.path.join(os.getcwd(), os.path.pardir)) )
更多关于Python标准库sys和os使用方法请查看下面的相关链接
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









