【Python零基础快速入门系列 | 15】常用标准库os、sys、logging快速掌握

这是机器未来的第31篇文章

原文首发地址:https://blog.csdn.net/RobotFutures/article/details/125775227

在这里插入图片描述

1. os模块

1.1 文件和目录操作相关

1.1.1 创建目录

  • mkdir
    创建目录,上一级目录必须存在,如果不存在会报错FileNotFoundError;
    文件存在的时候也报错:FileExistsError
import os

# 支持相对路径和绝对路径
os.mkdir("./models")
os.mkdir("i:\\BaiduSyncdisk\\新媒体\\Python快速入门系列\\models2")
# r前缀标识后面跟的都是原始字符串,无需转义
os.mkdir(r"i:\BaiduSyncdisk\新媒体\Python快速入门系列\models3")

"""
    如果目录已存在,则会报错
"""
import os

os.mkdir("./models")
---------------------------------------------------------------------------

FileExistsError                           Traceback (most recent call last)

C:\Users\ZHOUSH~1\AppData\Local\Temp/ipykernel_13192/3996702968.py in <module>
      3 import os
      4 
----> 5 print(os.mkdir("./models"))


FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: './models'
"""
    如果上级目录不存在,则会报错
"""
import os

os.mkdir("./models4/demo")
---------------------------------------------------------------------------

FileNotFoundError                         Traceback (most recent call last)

C:\Users\ZHOUSH~1\AppData\Local\Temp/ipykernel_13192/1843598940.py in <module>
      4 import os
      5 
----> 6 os.mkdir("./models4/demo")


FileNotFoundError: [WinError 3] 系统找不到指定的路径。: './models4/demo'
  • mkdirs
    创建目录,上一级目录不存在也会创建
import os

os.makedirs("./models4/demo")

1.1.2 删除目录

  • rmdir

删除指定的空目录, 如果目录不为空会报错

import os

os.rmdir('c:/abc/def/xyz')
  • removedirs
    删除空目录,删除之后还会看上一级目录是不是空的,如果是空的,也会一起删除,直到不为空为止
import os

os.removedirs('c:/abc/def2/xyz2')

1.1.3 删除文件

  • remove
# 删除指定的文件
os.remove('c:/abc/def/a.txt')

1.1.4 重命名文件或目录

  • rename
    重命名文件或者文件夹
# rename 重命名文件或者文件夹
os.rename('c:/abc/def','c:/abc/def_new')
os.rename('b.txt','b_new.txt')
  • renames
    相当于移动文件
# renames 相当于移动文件
os.renames('c:/abc/def_new/a.txt','c:/abc/a_new.txt')

1.1.5 返回当前工作目录

  • getcwd
# getcwd 返回当前工作的目录
os.getcwd()
'i:\\BaiduSyncdisk\\新媒体\\Python快速入门系列'

1.1.6 返回当前目录下的文件

  • listdir
# listdir 返回当前目录下的文件
os.listdir()
['Python快速入门系列(1)人工智能序章:开发环境搭建Anaconda+VsCode+JupyterNotebook(零基础启动).md',
 'Python快速入门系列(10)类的设计哲学:自然法则的具现.md',
 'Python快速入门系列(11)函数、类、模块和包如何构建四级模块化体系.md',
 'Python快速入门系列(12)面向Bug编程.ipynb',
 'Python快速入门系列(12)面向Bug编程.md',
 'Python快速入门系列(13)面对海量数据,怎样加载数据集.md.md',
 'Python快速入门系列(15)常用的Python包标准库.ipynb',
 'Python快速入门系列(2)一文快速掌握Python基础语法.md',
 'Python快速入门系列(3)AI数据容器底层核心之Python列表.md',
 'Python快速入门系列(4)python存储机制:浅拷贝与深拷贝.md',
 'Python快速入门系列(5)Python只读数据容器之元组.md',
 'Python快速入门系列(6)Python数据容器之序列:字符串、列表与元组对比.md',
 'Python快速入门系列(7)Python数据容器之字典.md',
 'Python快速入门系列(8)Python数据容器之集合.md',
 'Python快速入门系列(9)高级程序员绝世心法——模块化之函数封装.md',
 'Python快速入门系列-Day1 环境安装:VsCode+Anaconda.md',
 'Python快速入门系列-Day2 基础语法.md',
 'Python快速入门系列-Day3 数据结构之列表.md',
 'Python快速入门系列-Day4 数据结构之元组.md',
 'Python快速入门系列-Day5 数据结构之序列:字符串、列表与元组.md',
 'Python快速入门系列-Day6 数据结构之字典.md',
 'Python快速入门系列-Day7 数据结构之集合.md',
 'Python快速入门系列-Day8 函数.md',
 'slogon-3-python.png',
 'slogon-4.png']

1.2 路径操作

os.path

1.2.1 os.path.abspath - 获取指定文件的绝对路径

import os.path

# 返回绝对路径
p1 = os.path.abspath('slogon-4.png')

# 返回当前目录的路径
p2 = os.path.abspath('.')

print(p1, p2)
i:\BaiduSyncdisk\新媒体\Python快速入门系列\slogon-4.png i:\BaiduSyncdisk\新媒体\Python快速入门系列

1.2.2 os.path.basename - 获得路径中的文件名

import os.path
# basename 返回路径中最后一部分的内容
os.path.basename('/data/data107/cat_12_train/uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg')
'uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg'

1.2.3 os.path.dirname - 获得路径中的目录名

import os.path
# dirname 返回路径中除了最后一部分的其他内容
os.path.dirname('/data/data107/cat_12_train/uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg')
'/data/data107/cat_12_train'

1.2.4 os.path.split - 拆分路径为目录名和文件名

import os.path
# split 将路径拆分成dirname和basename, 返回值为元组
os.path.split('/data/data107/cat_12_train/uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg')
('/data/data107/cat_12_train', 'uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg')

1.2.5 os.path.join(path,name) - 连接目录与文件名或目录

这个函数在访问数据集的时候非常有用,数据集的标签一般为【文件名 标签】的形式,像这样

cat_12_train/wdBo7Qe1NTHuAn3t46iZDR0pvIl5yOVk.jpg       11
cat_12_train/BjF9wTmXCONM5HQizbLAful2xPdI6YKp.jpg       11
cat_12_train/NXe97uRzlM4iY1n25KgaI8jQoBvSt3rA.jpg       11
cat_12_train/L09SBu8VIbc6s7KGxzHiF125X4yUa3em.jpg       11
cat_12_train/fZSXcV9NCjm3qKEtLolhzvxMF8HDadAb.jpg       11
cat_12_train/Q51VeqXfMzEv9oJywRBOpubhU3txZCs6.jpg       11
cat_12_train/wmF9K4ZOqaznV1RDNBx65dYyT3hlJrP0.jpg       11
cat_12_train/z2lfTG1OJPYLyahQ0gtRoD3AW8Nvmkxe.jpg       11
cat_12_train/qfySvGFBOVcJzPEXHlsg7e1U3L2K6iAC.jpg       11
cat_12_train/D0gWHAKPN52SET1skGmCzQ6Oojle4vxp.jpg       11
cat_12_train/75HFSWMcflN9JgKuz8kIyDqRGL6UtiQ0.jpg       11
cat_12_train/LnNRq485zfeGiAYjyHvlbmP6ME2CgFSW.jpg       11
cat_12_train/uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg       11

根据python运行目录,组合出实际的路径,访问数据集中的文件。


import os.path
# join 将dirname和basename组合起来
os.path.join('/data/data107/', 'cat_12_train/uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg')
'/data/data107/cat_12_train/uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg'

1.2.6 os.path.exists - 判断路径是否存在

支持相对路径和绝对路径

import os.path
# exists 判断路径是否存在,如果存在返回True,如果不存在返回False
r1 = os.path.exists('./Python快速入门系列(15)常用的Python包标准库.ipynb')
r2 = os.path.exists(r'I:\BaiduSyncdisk\新媒体\Python快速入门系列\Python快速入门系列(15)常用的Python包标准库.ipynb')

print(r1, r2)
True True

1.3 命令执行

  • system
# 缺少包时可以直接安装或下载数据集
# system 执行shell命令,0 代表执行成功,1代表执行失败
cmd = 'pip install numpy2'
os.system(cmd)
  • popen
    popen也可以运行操作系统命令,并通过read()方法将命令的结果返回,不像system只能看不能存,这个能存!
f = os.popen('ipconfig')
print(f.read())
f.close()
    Windows IP 配置

    以太网适配器 以太网 3:
    
       连接特定的 DNS 后缀 . . . . . . . : 
       本地链接 IPv6 地址. . . . . . . . : fe80::fce9:959:265d:b80b%22
       IPv4 地址 . . . . . . . . . . . . : 2.0.0.1
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       默认网关. . . . . . . . . . . . . : 
  • subprocess

subprocess这个模块来产生子进程,并且可以连接到子进程的标准输入、输出、错误中,还可以获得子进程的返回值。使用subprocess模块的目的是用于替换os.system等一些旧的模块和方法。subprocess可以实现更加复杂的交互。

import subprocess
subprocess.call(['ls','-l'])
0
# 获得命令执行输出
import subprocess
result = subprocess.check_output(['ls','-l', 'models4'],shell=True)
print(result.decode('utf-8'))
total 0
drwxr-xr-x 2 zhoushimin Administrators 0 Jul 13 23:02 demo

2. sys模块

2.1 系统环境变量

sys.path是一个python运行的环境变量,是python运行时包的搜索路径列表,是一个列表形式,可以通过API添加或删除其中的路径。

import sys

sys.path
['i:\\BaiduSyncdisk\\新媒体\\Python快速入门系列',
 'd:\\Tools\\Anaconda3\\python37.zip',
 'd:\\Tools\\Anaconda3\\DLLs',
 'd:\\Tools\\Anaconda3\\lib',
 'd:\\Tools\\Anaconda3',
 '',
 'd:\\Tools\\Anaconda3\\lib\\site-packages',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\locket-0.2.1-py3.7.egg',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\win32',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\win32\\lib',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\Pythonwin',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\zhoushimin\\.ipython']
# 添加环境变量:在导入未安装的包时,通过这种方式非常方便
sys.path.append('D:/')
sys.path
['i:\\BaiduSyncdisk\\新媒体\\Python快速入门系列',
 'd:\\Tools\\Anaconda3\\python37.zip',
 'd:\\Tools\\Anaconda3\\DLLs',
 'd:\\Tools\\Anaconda3\\lib',
 'd:\\Tools\\Anaconda3',
 '',
 'd:\\Tools\\Anaconda3\\lib\\site-packages',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\locket-0.2.1-py3.7.egg',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\win32',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\win32\\lib',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\Pythonwin',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\zhoushimin\\.ipython',
 'D:/']

可以看到d:\根目录已经添加到环境变量之中了。

sys.path.remove('D:/')
sys.path
['i:\\BaiduSyncdisk\\新媒体\\Python快速入门系列',
 'd:\\Tools\\Anaconda3\\python37.zip',
 'd:\\Tools\\Anaconda3\\DLLs',
 'd:\\Tools\\Anaconda3\\lib',
 'd:\\Tools\\Anaconda3',
 '',
 'd:\\Tools\\Anaconda3\\lib\\site-packages',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\locket-0.2.1-py3.7.egg',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\win32',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\win32\\lib',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\Pythonwin',
 'd:\\Tools\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\zhoushimin\\.ipython']

可以看到刚才添加的环境变量D:/已经消失了。

2.2 查看系统环境参数

  • 查看操作系统
sys.platform # 获取操作系统
'win32'
sys.version  # 获取python解释器程序的版本信息
'3.7.11 (default, Jul 27 2021, 09:42:29) [MSC v.1916 64 bit (AMD64)]'
sys.getdefaultencoding() # 获取系统当前的编码
'utf-8'

3. logging模块

logging是python日志模块的标准库,用于在程序运行中跟踪程序运行状态、异常信息记录便于事后排查问题等目的。

默认的日志级别是warning

basicConfig:只会在第一次调用的时候起作用

参数:

level:设置日志级别,默认warning

format:

  • %(levelname)s:日志级别名称
  • %(name)s:日志器名称
  • %(message)s:日志信息
  • %(asctime)s:日志的时间

datefmt:设置时间格式

import logging
import os
file_name = os.getcwd()

logging.basicConfig(filename='my_log.log',level=logging.INFO,format='%(asctime)s--%(levelname)s:%(message)s',datefmt='%Y/%m/%d %H:%M:%S')
logging.debug('这是一个debug')
logging.info('这是一个info')
logging.warning('这是一个warning')
logging.error('这是一个error')
logging.critical('这是一个critical')
2022/07/13 23:54:28--INFO:这是一个info

2022/07/13 23:54:28--WARNING:这是一个warning

2022/07/13 23:54:28--ERROR:这是一个error

2022/07/13 23:54:28--CRITICAL:这是一个critical

《Python零基础快速入门系列》快速导航:

写在末尾:

  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 专栏简介:本专栏的核心就是:快!快!快!2周快速拿下Python,具备项目开发能力,为机器学习和深度学习做准备。
  • 面向人群:零基础编程爱好者
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
    • Python零基础快速入门系列
    • 快速入门Python数据科学系列
    • 人工智能开发环境搭建系列
    • 机器学习系列
    • 物体检测快速入门系列
    • 自动驾驶物体检测系列

猜你喜欢

转载自blog.csdn.net/RobotFutures/article/details/125775227