Python基础:系统编程_sys、os模块

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('.'))     # 不切换 只是查看当前目录
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值