0


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

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

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

在这里插入图片描述

1. os模块

1.1 文件和目录操作相关

1.1.1 创建目录

  • mkdir 创建目录,上一级目录必须存在,如果不存在会报错FileNotFoundError; 文件存在的时候也报错:FileExistsError
  1. import os
  2. # 支持相对路径和绝对路径
  3. os.mkdir("./models")
  4. os.mkdir("i:\\BaiduSyncdisk\\新媒体\\Python快速入门系列\\models2")# r前缀标识后面跟的都是原始字符串,无需转义
  5. os.mkdir(r"i:\BaiduSyncdisk\新媒体\Python快速入门系列\models3")
  1. """
  2. 如果目录已存在,则会报错
  3. """import os
  4. os.mkdir("./models")
  1. ---------------------------------------------------------------------------
  2. FileExistsError Traceback (most recent call last)
  3. C:\Users\ZHOUSH~1\AppData\Local\Temp/ipykernel_13192/3996702968.py in <module>
  4. 3 import os
  5. 4
  6. ----> 5 print(os.mkdir("./models"))
  7. FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: './models'
  1. """
  2. 如果上级目录不存在,则会报错
  3. """import os
  4. os.mkdir("./models4/demo")
  1. ---------------------------------------------------------------------------
  2. FileNotFoundError Traceback (most recent call last)
  3. C:\Users\ZHOUSH~1\AppData\Local\Temp/ipykernel_13192/1843598940.py in <module>
  4. 4 import os
  5. 5
  6. ----> 6 os.mkdir("./models4/demo")
  7. FileNotFoundError: [WinError 3] 系统找不到指定的路径。: './models4/demo'
  • mkdirs 创建目录,上一级目录不存在也会创建
  1. import os
  2. os.makedirs("./models4/demo")

1.1.2 删除目录

  • rmdir

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

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

1.1.3 删除文件

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

1.1.4 重命名文件或目录

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

1.1.5 返回当前工作目录

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

1.1.6 返回当前目录下的文件

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

1.2 路径操作

os.path

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

  1. import os.path
  2. # 返回绝对路径
  3. p1 = os.path.abspath('slogon-4.png')# 返回当前目录的路径
  4. p2 = os.path.abspath('.')print(p1, p2)
  1. i:\BaiduSyncdisk\新媒体\Python快速入门系列\slogon-4.png i:\BaiduSyncdisk\新媒体\Python快速入门系列

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

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

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

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

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

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

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

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

  1. cat_12_train/wdBo7Qe1NTHuAn3t46iZDR0pvIl5yOVk.jpg 11
  2. cat_12_train/BjF9wTmXCONM5HQizbLAful2xPdI6YKp.jpg 11
  3. cat_12_train/NXe97uRzlM4iY1n25KgaI8jQoBvSt3rA.jpg 11
  4. cat_12_train/L09SBu8VIbc6s7KGxzHiF125X4yUa3em.jpg 11
  5. cat_12_train/fZSXcV9NCjm3qKEtLolhzvxMF8HDadAb.jpg 11
  6. cat_12_train/Q51VeqXfMzEv9oJywRBOpubhU3txZCs6.jpg 11
  7. cat_12_train/wmF9K4ZOqaznV1RDNBx65dYyT3hlJrP0.jpg 11
  8. cat_12_train/z2lfTG1OJPYLyahQ0gtRoD3AW8Nvmkxe.jpg 11
  9. cat_12_train/qfySvGFBOVcJzPEXHlsg7e1U3L2K6iAC.jpg 11
  10. cat_12_train/D0gWHAKPN52SET1skGmCzQ6Oojle4vxp.jpg 11
  11. cat_12_train/75HFSWMcflN9JgKuz8kIyDqRGL6UtiQ0.jpg 11
  12. cat_12_train/LnNRq485zfeGiAYjyHvlbmP6ME2CgFSW.jpg 11
  13. cat_12_train/uklg2DrLwtj8nA45eGbhivoQBcJNXyfY.jpg 11

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

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

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

支持相对路径和绝对路径

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

1.3 命令执行

  • system
  1. # 缺少包时可以直接安装或下载数据集# system 执行shell命令,0 代表执行成功,1代表执行失败
  2. cmd ='pip install numpy2'
  3. os.system(cmd)
  • popen popen也可以运行操作系统命令,并通过read()方法将命令的结果返回,不像system只能看不能存,这个能存!
  1. f = os.popen('ipconfig')print(f.read())
  2. f.close()
  1. Windows IP 配置
  2. 以太网适配器 以太网 3:
  3. 连接特定的 DNS 后缀 . . . . . . . :
  4. 本地链接 IPv6 地址. . . . . . . . : fe80::fce9:959:265d:b80b%22
  5. IPv4 地址 . . . . . . . . . . . . : 2.0.0.1
  6. 子网掩码 . . . . . . . . . . . . : 255.255.255.0
  7. 默认网关. . . . . . . . . . . . . :
  • subprocess

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

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

2. sys模块

2.1 系统环境变量

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

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

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

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

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

2.2 查看系统环境参数

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

3. logging模块

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

默认的日志级别是warning

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

参数:

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

format:

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

datefmt:设置时间格式

  1. import logging
  2. import os
  3. file_name = os.getcwd()
  4. logging.basicConfig(filename='my_log.log',level=logging.INFO,format='%(asctime)s--%(levelname)s:%(message)s',datefmt='%Y/%m/%d %H:%M:%S')
  5. logging.debug('这是一个debug')
  6. logging.info('这是一个info')
  7. logging.warning('这是一个warning')
  8. logging.error('这是一个error')
  9. logging.critical('这是一个critical')
  1. 2022/07/13 23:54:28--INFO:这是一个info
  2. 2022/07/13 23:54:28--WARNING:这是一个warning
  3. 2022/07/13 23:54:28--ERROR:这是一个error
  4. 2022/07/13 23:54:28--CRITICAL:这是一个critical

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

  • 【Python零基础入门笔记 | 01】 人工智能序章:开发环境搭建Anaconda+VsCode+JupyterNotebook(零基础启动)
  • 【Python零基础入门笔记 | 02】一文快速掌握Python基础语法
  • 【Python零基础入门笔记 | 03】AI数据容器底层核心之Python列表
  • 【Python零基础入门笔记 | 04】为什么内存中最多只有一个“Love“?一文读懂Python内存存储机制
  • 【Python零基础入门笔记 | 05】Python只读数据容器:列表List的兄弟,元组tuple
  • 【Python零基础入门笔记 | 06】字符串、列表、元组原来是一伙的?快看序列Sequence
  • 【Python零基础入门笔记 | 07】成双成对之Python数据容器字典
  • 【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合
  • 【Python零基础入门笔记 | 09】高级程序员绝世心法——模块化之函数封装
  • 【Python零基础入门笔记 | 10】类的设计哲学:自然法则的具现
  • 【Python零基础入门笔记 | 11】函数、类、模块和包如何构建四级模块化体系
  • 【Python零基础入门笔记 | 12】程序员为什么自嘲面向Bug编程?
  • 【Python零基础入门笔记 | 13】面对海量数据,如何优雅地加载数据?请看迭代器与生成器
  • 【Python零基础入门笔记 | 14】深度学习如何保存训练好的模型,请看数据持久化之文件操作(1)
  • 【Python零基础入门笔记 | 14】深度学习如何保存训练好的模型,请看数据持久化之文件操作(2)

写在末尾:

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


本文转载自: https://blog.csdn.net/RobotFutures/article/details/125775227
版权归原作者 i机器未来 所有, 如有侵权,请联系我们删除。

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

还没有评论