os模块
- 顾名思义, os是操作系统的意思,整个底层的操作系统
- 它提供了一种方便的使用操作系统函数的方法
sys模块
- sys 就是系统的意思,解释器系统等
- 它提供了访问解释器使用和维护的变量和与解释器进行交互的函数
总结:os模块负责程序和操作系统的交互,提供了访问操作系统底层的接口
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python运行时的环境
一些常用的方法
sys模块:
import sys
# 查看sys所有可用方法属性
print(dir(sys))
# sys文档
print(sys.__doc__)
print(sys.__name__) # sys本身
# 操作系统平台
print(sys.platform) # win32
# print(sys.modules['os']) # 返回导入的系统模块os的路径(还可以查其他标准库路径)
print(sys.getdefaultencoding()) # utf-8 系统当前默认编码
print(sys.getfilesystemencoding()) # utf-8 文件系统编码方式
print(sys.argv)# 程序外部向程序传递的参数
print(sys.path) # 模块的搜索路径, 标准路径
sys.stdout.write('hello') # hello 向控制台输出
sys.stderr.write('出错啦') # 出错啦
# value = sys.stdin.readline() # 读取输入,一行,遇换行结束
# print(value)
for i in (sys.stdin, sys.stdout, sys.stderr):
print(i)
# <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>
# <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
# <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>
sys.exit('出错退出') # 出错退出 exit code 1, 异常退出后面不再执行, 0 正常退出
这里着重讲一下 sys.path
# sys.path返回的是列表
# 第一个路径是当前目录
# 第二个路径是工程目录
# 其他路径是标准路径
# 第三方库路径 I:\python解释器路径\lib\site-packages
# python在导入模块的时候,会在标准路径sys.path里找, 找到了就不会再往下找了
# 所以自己的模块名千万不要和库名一致, 这时不会去库里找,导入不了库
想调用自己写的库
暂时添加:
- 可以把自己写的库追加到标准路径
sys.path.append(r'D:\自己写的库所在目录\my_libs')
# mylibs里有t_testlib.py文件,文件里有func方法,可以导入
from t_testlib import func
# from 自己写的库所在目录\my_libs import t_testlib 报错,在他里面找,不能看到他本身的
永久添加:
- 在site-packages里新建path1.pth,里面写上路径
os模块:
import os
# os.sys() 运行shell命令(相当于打开新的终端)
# os.environ获取环境变量,取path打印出path路径
print(os.environ['path'])
# 显示当前平台 nt代表windows posix代表linux系统
print(os.name) # nt
# linux下支持:uname = os.uname()
# uname.sysname操作系统名 nodename主机名 release内核版本 version系统版本 machine硬件架构
# 显示当前平台下路径分隔符
print(os.sep) # \
# 用户登录名称
print(os.getlogin()) # Administrator
# 得到环境变量配置信息
print(os.getenv('path'))
# 设置环境变量
# print(os.putenv('key'))
# --------------------------------------
# 文件操作
# os.getcwd() 当前脚本工作路径
print(os.getcwd())
# os.chdir(dir)# 改变当前路径
os.listdir('./') # 列出指定目录下的所有文件和目录名
# 目录不存在,就新建
if not os.path.exists('mk_1'):
os.mkdir('mk_1') # 无法创建多层递归目录
# 重命名一个文件/目录
os.rename('mk_1', 'mk_1_new')
# 删除单级目录,而且只能是空的
os.rmdir('mk_1_new')
# 创建文件
# os.mknod('t1.txt') 只能在linux下使用
with open('t.txt', 'w+') as fo:
pass
# 删除一个文件
os.remove('t.txt')
# 创建多层递归目录
os.makedirs('mk_2/mk_2_1')
# 删除多个递归目录
os.removedirs('mk_2/mk_3')
os.path 路径的操作
# --------------------------------
import os
# 路径的操作
print(os.pardir) # 当前平台下上一级目录的字符 ..
print(os.path.pardir) # ..
# 获取文件的绝对路径
print(os.path.abspath(os.path.pardir)) # D:\interface\study
# 返回当前文件的上一级目录 dirnaem getcwd
print(os.path.dirname(__file__)) # D:\interface\study\DS
print(os.getcwd()) # D:\interface\study\DS
# 文件夹和文件名进行分割
print(os.path.split(os.path.abspath(__file__)))
# ('D:\interface\\study\\DS', 'ttt_sys.py')
# 分割文件扩展名,返回路径名和文件扩展名的元祖
print(os.path.splitext(os.path.abspath(__file__)))
# ('D:\\interface\\study\\DS\\ttt_sys', '.py')
# os.path.join() # 拼接
print(os.path.join('D:/f1/','f2/','f3/')) # D:/f1/f2/f3/
print(os.path.basename(__file__)) # 返回文件名 ttt_sys.py
print(os.path.getctime(__file__)) # 返回创建时间戳 1660280610.3479886
import time
# 把时间戳转成本地时间
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getctime(__file__))))
# 2022-08-12 13:03:30
# os.path.exists() # 判断文件是否存在
# os.path.isdir() # 是不是目录
# os.path.isfile() # 是不是文件
# os.path.isabs() # 是不是绝对路径
# os.path.islink() # 是不是连接文件(linux里面使用)
# os.path.samefile() # 判断两个文件是不是指的同一个文件
# 遍历文件夹的所有目录与文件
path = os.walk('D:\songqin\interface\study\Delivery_system', topdown=True)
for one in path:
print(one[0], end=' ')
print(one[1], end=' ')
print(one[2])
这里非常重要的是os.path.join(),它是以第一个不是/开头的字符开始拼接的,会忽略前面带/的字符串,所以第一个不要带/, 最好写路径是前不带/, 后带/, 如 configs/