文章目录1. sys 模块
1.3.1 典型应用:从命令行读取参数
1.3.2 终止脚本执行
1.3.3 从控制台读取输入
1.1 sys 模块中常用函数和对象
1.2 使用样例
1.3 应用讲解
2. os模块介绍
2.3.1 运行命令(打开命令行窗口、记事本等)
2.3.2 打开带有关联工具的文件(office文件等)
2.3.3 获取当前路径下文件的全路径文件名
2.3.4 从全路径文件名提取路径、文件名、扩展名
2.3.5 递归遍历文件夹
2.1 os 模块中常用的变量和函数
2.2 使用样例
2.3 应用讲解
3. 后记
在 Python 的内置模块中,sys 和 os 这两个模块都和操作系统有点关系,因此我把这两个模块放在一篇文章里讨论,实际上二者之间几乎没有什么关联关系。sys 是一个和 Python 解释器关系密切的标准库,它和帮助我们访问和 Python 解释器联系紧密的变量和函数。os 模块代表了程序所在的操作系统,主要用于获取程序运行所在操作系统的相关信息。
1. sys 模块
1.1 sys 模块中常用函数和对象
sys成员(变量和函数)功能描述sys.argv获取运行 Python 程序的命令行参数。其中 sys.argv[0] 通常就是指该 Python 程序,sys.argv[1] 代表为 Python 程序提供的第一个参数,sys.argv[2] 代表为 Python 程序提供的第二个参数……依此类推。
sys.path是一个字符串列表,其中每个字符串都是一个目录名,在使用 import 语句导入模块时,解释器就会从这些目录中查找指定的模块。
sys.exit()通过引发 SystemExit 异常来退出程序。将其放在 try 块中不能阻止 finally 块的执行。你可以提供一个整数作为参数(默认为 0 ,标识成功),用来标识程序是否成功运行,这是 UNIX 的一个惯例。
sys.modules返回模块名和载入模块对应关系的字典。
sys.stdin、sys.stdout、sys.stderr这三个模块变量是类文件流对象,分别表示标准输入、标准输出和标准错误。简单理解,Python 利用 sys.stdin 获得输入,利用 sys.stdout 输出。
sys.getrefcount(object)返回指定对象的引用计数。前面介绍过,当 object 对象的引用计数为 0 时,系统会回收该对象。
sys.getrecursionlimit()返回 Python 解释器当前支持的递归深度。该属性可通过 setrecursionlimit() 方法重新设置。
sys.getswitchinterval()返回在当前 Python 解释器中线程切换的时间间隔。该属性可通过 setswitchinterval() 函数改变。
sys.maxsize返回 Python 整数支持的最大值。在 32 位平台上,该属性值为 231-1;在 64 位平台上,该属性值为 263-1。
sys.executable该属性返回 Python 解释器在磁盘上的存储路径。
sys.byteorder显示本地字节序的指示符。如果本地字节序是大端模式,则该属性返回 big;否则返回 little。
sys.copyright该属性返回与 Python 解释器有关的版权信息。
sys.version返回当前 Python 解释器的版本信息。
sys.winver返回当前 Python 解释器的主版本号。
1.2 使用样例>>> sys.copyright # 显示Python解释器有关的版权信息'Copyright (c) 2001-2018 Python Software Foundation.\nAll Rights Reserved.\n\nCopyright (c) 2000 BeOpen.com.\nAll Rights Reserved.\n\nCopyright (c) 1995-2001 Corporation for National Research Initiatives.\nAll Rights Reserved.\n\nCopyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.\nAll Rights Reserved.'>>> sys.executable # 显示Python解释器在磁盘上的存储路径'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\pythonw.exe'>>> sys.platform # 显示Python解释器所在平台'win32'>>> sys.version # 显示当前Python解释器的版本信息'3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]'>>> sys.winver # 返回当前Python解释器的主版本号'3.7'>>> sys.byteorder # 显示本地字节序的指示符'little'>>> sys.getfilesystemencoding() # 显示当前系统上保存文件所用的字符集'utf-8'>>> sys.maxsize # 显示Python整数支持的最大值9223372036854775807>>> sys.path # 使用 import 语句导入模块时,解释器会从这些目录中查找指定的模块['', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\idlelib', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\xufiv\\AppData\\Roaming\\Python\\Python37\\site-packages', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\win32', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\win32\\lib', 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\Pythonwin']>>> sys.argv # 获取运行 Python 程序的命令行参数['']1234567891011121314151617181920
1.3 应用讲解
1.3.1 典型应用:从命令行读取参数
设计一个多项求和的脚本,从命令行读取参数参与求和的各个数字。# -*- coding:utf-8 -*-import sysdef multi_sum(args):
return sum(args)if __name__ == '__main__':
print(sys.argv)
args = sys.argv[1:]
result = multi_sum([float(item) for item in args])
print('输入了%d个参数'%len(args))
print('累计和为%f'%result)12345678910111213
执行结果如下:PS D:\CSDN> py -3 .\multi_sum.py['.\\multi_sum.py']输入了0个参数
累计和为0.000000
PS D:\CSDN> py -3 .\multi_sum.py 3 4.5 2.8['.\\multi_sum.py', '3', '4.5', '2.8']输入了3个参数
累计和为10.300000
PS D:\CSDN>123456789
1.3.2 终止脚本执行
在代码的任何地方调用 sys.exit(),都会引发 SystemExit 异常,进而退出程序。需要注意的是,如果 sys.exit() 放在 try 块中,SystemExit 异常被捕获后,无论退出还是不退出程序,都无法阻止执行 finally 语句块。
1.3.3 从控制台读取输入
更多时候,我们使用 Python 的内置函数 input 从控制台读取输入。sys.stdin 则为我们提供了另外一种选择。>>> str_in = input('Please enter: ') # 使用内置函数 input 从控制台读取输入Please enter: hello world>>> str_in'hello world'>>> len(str_in)11>>> str_in = sys.stdin.readline() # 使用内置函数 sys.stdin.readline 从控制台读取输入hello world>>> str_in'hello world\n'>>> len(str_in)12123456789101112
对比可以看出,使用内置函数 sys.stdin.readline 从控制台读取输入时,返回的字符串保留了换行符\n,要想去掉的话,使用strip()函数就可以了。strip()函数可以删除字符串首尾的所有空格以及转义字符。
2. os模块介绍
2.1 os 模块中常用的变量和函数
sys成员(变量和函数)功能描述os.listdir(path)返回路径下所有的文件和文件夹列表
os.getcwd(path)返回程序当前的默认目录
os.makedirs(path)创建多级目录
os.mkdir(path)创建下一级目录
os.remove(path)删除单个文件
os.walk(path)递归遍历文件夹
os.path.abspath(path)返回绝对路径
os.path.basename(path)返回文件名
os.path.exists(path)如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
os.path.getsize(path)返回文件大小,如果文件不存在就返回错误
os.path.isfile(path)判断路径是否为文件
os.path.join(path1[, path2[, …]])把目录和文件名合成一个路径
os.path.split(path)把路径分割成 dirname 和 basename,返回一个元组
os.path.splitext(path)分割路径,返回路径名和文件扩展名的元组
os.name回导入依赖模块的操作系统名称,通常可返回 ‘posix’、‘nt’、 ‘java’ 等值其中之一。
os.environ返回在当前系统上所有环境变量组成的字典。
os.sep返回路径分隔符。
os.getenv(key, default=None)获取指定环境变量的值。
os.getlogin()返回当前系统的登录用户名。与该函数对应的还有 os.getuid()、os.getgroups()、os.getgid() 等函数,用于获取用户 ID、用户组、组 ID 等,这些函数通常只在 UNIX 系统上有效。
os.getpid()获取当前进程 ID。
os.getppid()获取当前进程的父进程 ID。
os.putenv(key, value)该函数用于设置环境变量。
os.cpu_count()返回当前系统的 CPU 数量。
os.name回导入依赖模块的操作系统名称,通常可返回 ‘posix’、‘nt’、 ‘java’ 等值其中之一。
os.system(command)运行操作系统上的指定命令。
os.kill(pid, sig)将 sig 信号发送到 pid 对应的过程,用于结束该进程。
os.popen(cmd, mode=‘r’, buffering=-1)用于向 cmd 命令打开读写管道(当 mode 为 r 时为只读管道,当 mode 为 rw 时为读写管道),buffering 缓冲参数与内置的 open() 函数有相同的含义。该函数返回的文件对象用于读写字符串,而不是字节。
os.startfile(path[,operation])对指定文件使用该文件关联的工具执行 operation 对应的操作。如果不指定 operation 操作,则默认执行打开(open)操作。operation 参数必须是有效的命令行操作项目,比如 open(打开)、edit(编辑)、print(打印)等。
2.2 使用样例print(os.name)# 获取PYTHONPATH环境变量的值print(os.getenv('PYTHONPATH'))# 返回当前系统的登录用户名print(os.getlogin())# 获取当前进程IDprint(os.getpid())# 获取当前进程的父进程IDprint(os.getppid())# 返回当前系统的CPU数量print(os.cpu_count())# 返回路径分隔符print(os.sep)# 返回当前系统的路径分隔符print(os.pathsep)# 运行平台上的cmd命令os.system('cmd')# 使用Excel打开D:\abc.xls文件os.startfile('D:\\abc.xls')# root->根目录,dirs->当前目录下所有的文件夹列表,files->当前目录下所有的文件列表for root, dirs, files in os.walk(".", topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))12345678910111213141516171819202122232425
2.3 应用讲解
2.3.1 运行命令(打开命令行窗口、记事本等)>>> os.system('cmd')-1073741510>>> os.system('notepad')01234
2.3.2 打开带有关联工具的文件(office文件等)os.startfile(r'D:\xufive\个人陈述_数院_应用统计.docx')1
2.3.3 获取当前路径下文件的全路径文件名>>> os.getcwd() # 查看当前路径'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37'>>> os.listdir() # 查看当前路径下的文件及文件夹['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'Scripts', 'tcl', 'Tools', 'vcruntime140.dll']>>> os.path.join(os.getcwd(), 'pythonw.exe') # 拼接 pythonw.exe 文件的全路径文件名'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\pythonw.exe'123456
2.3.4 从全路径文件名提取路径、文件名、扩展名>>> fn = 'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37\\pythonw.exe'>>> dirname, basename = os.path.split(fn)>>> dirname'C:\\Users\\xufiv\\AppData\\Local\\Programs\\Python\\Python37'>>> basename'pythonw.exe'>>> name, ext = os.path.splitext(basename)>>> name'pythonw'>>> ext'.exe'1234567891011
2.3.5 递归遍历文件夹>>> for root, dirs, files in os.walk(r'D:\CSDN', topdown=False): # 递归遍历D:\CSDN文件夹
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
D:\CSDN\FY-3-Calibration\data\NWP_GBAL_20190226_1200.npz
D:\CSDN\FY-3-Calibration\.gitignore
D:\CSDN\FY-3-Calibration\colormap.cm
D:\CSDN\FY-3-Calibration\colormap.py
D:\CSDN\FY-3-Calibration\demo.py
D:\CSDN\FY-3-Calibration\region.py
D:\CSDN\FY-3-Calibration\scene.py
D:\CSDN\FY-3-Calibration\data
D:\CSDN\multi_sum.py
D:\CSDN\readme.txt
D:\CSDN\FY-3-Calibration