sys
import sys
查看模块下有哪些功能
print(dir(sys)) # 打印sys模块下所有的成员、功能
from pprint import pprint
print(pprint(dir(sys))) # 用这个pprint模块打印效果是一行一个 更美观一些
平台与版本
print(sys.platform)
# 获取当前系统环境:win32 64位系统打印的结果也是win32,Python只有32位的
print(sys.version) # 当前使用的Python版本:
# 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
print(sys.path) # 获取python环境变量
print(sys.modules) # 当前已经载入的模块
观察异常细节
1、通过之前的方式:手动抛出异常
try:
raise KeyError # 手动抛出一个异常
except: # 如果捕获到任何异常
print('有错误发生!') # 就打印一个消息
try:
raise KeyError('错误的键值!') # 手动抛出一个异常并明确一下异常
except KeyError as e: # 如果捕获到这个异常,就把它放到一个变量e里
print(e) # 再打印这个异常
2、使用sys结合traceback
import traceback
try:
raise KeyError # 手动抛出一个异常
except: # 如果捕获到任何异常
print(sys.exc_info()) # 打印捕获到最近一次发生的异常 .exc_info()可以查看到细节,返回元祖
# (<class 'KeyError'>, KeyError(), <traceback object at 0x00A32558>)
# 类型 消息(这里没有加错误内容所以是空的) 回溯对象
traceback.print_tb(sys.exc_info()[2]) # 打印捕获到异常的第三个元素的细节:回溯对象
# 这种方式可以快速的定位到异常错误的位置
命令行参数
sys.argv:在命令行下查看和使用命令行参数
在Windows控制台下调用python脚本程序的时候能看到效果
import sys
def add():
a = 5
b = 3
return a + b
print(add())
print(sys.argv) # 在命令行打印命令行的参数,返回列表
# 在命令行执行脚本文件的时候输入:python d:\文件路径.py 那么它打印的就是文件路径:[d:\文件路径.py]
# 输入:python d:\文件路径.py a b 1 2 那么它打印的就是文件路径:[d:\文件路径.py,a,b,1,2]
print(sys.argv[0]) # 在命令行打印第一个参数 d:\文件路径.py
print(sys.argv[1]) # 在命令行打印第二个参数 a
案例
demo.py
def add(a, b):
return a + b
a = 0 # 默认值 防止用户没有输入
b = 0 # 默认值 防止用户没有输入
if sys.argv[1]: # 如果输入了第二个参数
a = int(sys.argv[1])
if sys.argv[2]: # 如果输入了第三个参数
b = int(sys.argv[2])
print(add(a, b)) # 执行函数并打印结果
# 在控制台输入:python D:\demo.py 5 6 打印出结果11
模块应用:标准流
sys.stdin 标准输入流 默认等同于 input()
sys.stdout 标准输出流 默认等同于 print()
sys.stderr 标准错误流
import sys
# 输入流
print('hello') # 打印一行字
sys.stdout.write('hello') # 用sys下的方法打印
print('======================================================')
# 输出流
input('请输入信息:')
print('请输入信息:', end='');sys.stdin.readline()[:] # 用sys下的方法
print('请输入信息:', end='');x = sys.stdin.readline()[:]
# 用sys下的方法,把结果赋值给x 等同于x = input('请输入信息:')
print(x)
# 错误流
sys.stderr.write('错误消息')
sys.stderr.flush()
os
import os
# shell 变量
print(os.environ) # 获取python环境变量
# 管理工具
print(os.getcwd()) # 当前工作目录
print(os.listdir()) # 观察当前工作目录下的内容
print(os.listdir(r'f:')) # 观察F盘根目录下的内容
os.chdir('mulu1') # 切换目录
print(os.getcwd()) # 当前工作目录
print(os.getpid()) # 当前python进程id
print(os.getppid()) # 当前python进程的父进程id
运行shell命令
Windows下叫命令提示符,Linux下叫shell命令,mac下叫终端
import os
.system():Python脚本中运行shell命令
只运行命令 用.system()
os.chdir(r'f:') # 切换到f盘
print(os.getcwd()) # 查看当前目录
print(os.system('dir')) # 查看目录下的内容(执行Windows的dos命令:dir)
print(os.system('dir /b')) # 以换行方式显示
# dir /b:列出当前目录下的内容 带/b打印效果是一行一个
print(os.system('type python.txt')) # 查看python.txt这个文件的内容
.popen():Python脚本中运行shell命令并连接输入输出流 返回文件对象
如果想要得到结果 用.popen()
print(os.popen('dir /b')) # dir:查看目录下的内容 返回文件对象
txt = os.popen('dir /b').read() # 通过.read()得到所有内容 赋值给txt
print(txt) # 打印结果
print(os.popen('type python.txt')) # 查看文件里的内容
txt2 = os.popen('type python.txt').readlines()
print(txt2)
文件处理
可结合管理工具做一系列操作
os.getcwd() # 查看当前工作目录
os.chdir('demo9\\mulu1') # 切换到mulu1目录
os.getcwd() # 查看当前工作目录
os.mkdir('test') # 创建一个目录
os.listdir() # 查看当前工作目录下的内容
os.chdir('test') # 切换到test目录
os.getcwd() # 查看当前工作目录
os.listdir() # 查看当前工作目录下的内容
open('info.txt', 'w', encoding='utf8').write('Hello') # 在当前工作目录创建一个Hello文件 open方式
os.listdir() # 查看当前工作目录下的内容
os.rename('info.txt', 'data.txt') # 改名
os.listdir() # 查看当前工作目录下的内容
os.remove('data.txt') # 删除文件
os.chdir('..') # 切换到..目录:返回上一级目录
os.getcwd() # 查看当前工作目录
os.rmdir('test') # 删除目录
可移植工具
print(os.sep) # 在当前win系统下是:\\ 分隔符
print(os.pathsep) # 在当前win系统下是:; 路径分隔符
print(os.curdir) # 在当前win系统下是:. 相对当前目录符号
print(os.pardir) # 在当前win系统下是:.. 相对上级目录符号(父目录符合)
路径模块:.path子模块
os.path.isdir(r'd:\Baofeng') # 判断某一个内容是不是一个目录
os.path.isdir(r'd\123.xtx') # 判断某一个内容是不是一个目录
os.path.isfile(r'd:\123.xtx') # 判断某一个内容是不是一个文件
os.path.exists(r'd:\123.txt') # 判断某个文件是否存在
os.path.exists(r'd:\Baofeng') # 判断某个目录是否存在
os.path.getsize(r'f:\python.txt') # 查看文件大小 单位:字节
name = r'C:\123\456\789.txt'
print(os.path.split(name)) # 拆分路径:切割文件路径,返回一个元祖(C:\123\456, 789.txt)
print(os.path.dirname(name)) # 获取目录名称,C:\\123\\456
print(os.path.basename(name)) # 获取文件名称,789.txt
# .splitext(path) 拆分路径扩展名
print(os.path.splitext(name)) # 切割文件的扩展名 (C:\\123\\456,\\789, .txt)
print(os.path.splitext(name)[1]) # 获取文件的扩展名 .txt
# .join() 连接路径
print(os.path.join(r'C:\temp', 'product.csv')) # 连接目录名称和文件名称
该怎么切割 怎么连接的,这些都是根据 可移植工具来判断
# 字符串str的.split()切割方法
os.path.split(name) # 使用path的.split()切割方法
print(name.split(os.sep)) # 使用字符串的切割方法,指定以操作系统的分隔符来切割
.normpath():标准化路径
p = 'D:\\app\\db/files/data.csv'
print(os.path.normpath(p)) # 把一个不规范路径,标准化为一个标准的、符合当前操作系统的路径
.abspath():绝对化路径
print(os.getcwd()) # 查看当前工作目录
os.chdir('mulu1') # 进入到mulu1目录
print(os.getcwd()) # 查看当前工作目录
print(os.path.abspath('..')) # 不切换 只是查看当前目录的上级目录
print(os.path.abspath('.')) # 不切换 只是查看当前目录