os模块
目录
os模块(重要)
os模块简介
os模块主要与操作系统打交道
目前,计算机上主流的操作系统有Windows、Unix、Mac OS等,os模块为多操作系统的访问提供了相关功能的支持,涉及对文件相关操作功能的实现,系统访问path路径的操作,shell命令行操作,Linux扩展属性的操作,流程管理,CPU等硬件相关信息的获取,基于操作系统的真正的随机数的操
Os库提供通用的、基本的操作系统交互功能:
- Os库是python标准库,包含几百个函数
- 常用路径操作、进程管理、环境参数等几类
- 路径操作:os.path子库,处理文件路径及信息
- 进程管理:启动系统中其他程序
- 环境参数:获得系统软件硬件信息等环境参数
创建目录
os.mkdir()
import os
os.mkdir('bin') # 在当前目录下 创建一个空的bin文件夹
# 如果文件已存在会报错 # FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'bin'
import os
os.mkdir('bin')
os.mkdir('bin') # 如果文件已存在会报错
# FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'bin'
import os
os.mkdir(r'../bin') # 支持绝对路径 相对路径
print(os.mkdir) # <built-in function mkdir>
import os
os.mkdir(r'bin/start') # FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'bin/start'
# 不支持多级目录的创建 也就是说一次只能创建一个文件夹
os.makedirs()
# 1.即可以创单级目录 也可以创多级目录
import os
os.makedirs(r'bin/little_bin/small_bin') # 可以一次性创建三个 如下图
删除目录
os.rmdir()
# 1.只能删空的目录(文件夹)
import os
os.rmdir('bin') # OSError: [WinError 145] 目录不是空的。: 'bin'
# 2.不能一次性删除多级目录
import os
os.makedirs(r'bin/little_bin/small_bin')
os.rmdir(r'bin/little_bin/small_bin') # 只会删掉最内层的small_bin
os.removedirs()
# 1.可以删除多级目录 只能删空的目录 如果有额外的东西就会保留
import os
os.makedirs(r'bin/little_bin/small_bin')
os.removedirs(r'bin/little_bin/small_bin') # 会全部删干净 # 但如果有文件 不是空文件夹 则会保留
列举指定路径下文件名称
os.listdir()
# 1.列举当前执行文件所在目录的所有文件 当前目录
import os
os.mkdir('bin')
os.mkdir('conf')
os.mkdir('core')
os.mkdir('interface')
os.mkdir('db')
os.mkdir('lib')
os.mkdir('log')
print(os.listdir()) # ['.idea', 'bin', 'conf', 'core', 'db', 'interface', 'lib', 'log', 'start.py', 'venv']
# 2.支持相对路径 绝对路径
import os
print(os.listdir('.')) # ['.idea', 'bin', 'conf', 'core', 'db', 'interface', 'lib', 'log', 'start.py', 'venv']
print(os.listdir(r'c:/')) # 查看c盘文件 注意这里只适用于windows系统
删除文件 或 重命名
os.remove()
import os
os.remove('bin/hello') # 只能删除文件 不能删除目录
os.remove('bin') # PermissionError: [WinError 5] 拒绝访问。: 'bin'
os.rename()
# 1.可以修改文件和目录的名字
import os
os.rename('bin','new_bin') # 将当前目录下的bin文件夹 名字改为 new_bin
# 2.rename接受两个路径作为参数
os.rename('bin/name','bin/miku') # 修改bin文件夹下的name文件 将其名字改为miku
# 先找到左边的路径确认有没有文件 ————> 然后在右边的路径修改文件名字
获取、切换当前工作目录
os.getcwd()
os.chdir()
# 1.getcwd获取当前工作目录 chdir切换当前工作目录
import os
print(os.getcwd()) # D:\pythonProject03\day19
os.chdir('..') # 切换到上一级目录
print(os.getcwd()) # D:\pythonProject03
os.mkdir(r'hei')
动态获取项目根路径(重要)
os.path.abspath
# 跟__file__组合使用 __file__最好不要单独使用 容易出现兼容性问题
# 1.获取当前执行文件的绝对路径 兼容性好 在不同电脑也能获取
import os
print(__file__) # E:/Python文件/python_coldclass/start.py
print(os.path.abspath(__file__)) # E:\Python文件\python_coldclass\start.py
os.path.dirname(重要)
# 1.获取执行文件所在的目录 dirname指文件夹
import os
print(os.path.abspath(__file__)) # E:\Python文件\python_coldclass\start.py
print(os.path.dirname(__file__)) # E:/Python文件/python_coldclass
# 2.dirname的嵌套使用(重要)
print(os.path.dirname(__file__)) # E:/Python文件/python_coldclass
print(os.path.dirname(os.path.dirname(__file__))) # E:/Python文件
# 3.动态获取文件目录 给他加到sys.path
import sys
import os
base_dir = os.path.dirname(__file__) # 获取执行文件所在目录
sys.path.append(base_dir)
判断路径是否存在(重要)
os.path.exists()
print(os.path.exists(r'01 os模块.py')) # 判断文件路径是否存在 True
print(os.path.exists(r'D:\pythonProject03\day19')) # 判断目录是否存在 True
os.path.isfile()
print(os.path.isfile(r'01 os模块.py')) # 判断路径是否是文件 True
print(os.path.isfile(r'D:\pythonProject03\day19')) # 判断路径是否是文件 False
os.path.isdir()
# print(os.path.isdir(r'01 os模块.py')) # False
# print(os.path.isdir(r'D:\pythonProject03\day19')) # True
路径拼接(重要)
os.path.join()
# 涉及到路径拼接一定不要自己做 因为不同的操作系统路径分隔符不一样
s1 = r'D:\pythonProject03\day19'
s2 = r'01 os模块.py'
print(f'{s1}\{s2}') # 不要这样做
print(os.path.join(s1, s2)) # 使用os.path.join
os.path.getsize()
# 获取文件大小 以字节为单位
print(os.path.getsize(r'a.txt')) # 5 # hello
os模块大小写敏感问题 (重要)
os模块会适配各种操作系统,其中windows系统对大小写不敏感,所以os.path.exists
在windows下也会对大小写不敏感,他会继承操作系统的特点,也就是你输入路径 c:\info.txt
或 C:\INFO.txt
都会判断为True,而Linx系统是对大小写敏感的,此时os.path.exists也会继承这一点,对路径判断变的严格。
参考:https://blog.csdn.net/laizi_laizi/article/details/105895196
sys模块
跟python解释器打交道
基本使用
import sys
print(sys.path) # 获取执行文件的sys.path
print(sys.getrecursionlimit()) # 获取python解释器默认最大递归深度
sys.setrecursionlimit(2000) # 修改python解释器默认最大递归深度
print(sys.version) # 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
print(sys.version_info) # 也是输出当前解释器版本信息 只不过输出的是结构化信息 可以用点取值
# sys.version_info(major=3, minor=8, micro=6, releaselevel='final', serial=0)
print(sys.platform) # 平台信息 win32(了解即可)
sys.argv(了解)
# 1.当py文件在命令行执行时 限制用户行为
# 在命令行才会起作用
res = sys.argv
print(res) # python 参数 参数 获取这些参数存在列表里
'''
示例:
python test.py jason 123
终端输出:
['tests.py', 'jason', '123']
'''
if len(res) != 3:
print('执行命令缺少了用户名或密码')
else:
username = res[1]
password = res[2]
if username == 'jason' and password == '123':
print('jason您好 文件正常执行')
else:
print('您不是jason无权执行该文件')
示例:
做题
import os
import json
'''1.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化'''
file_choice = '.txt'
file_list = os.listdir('ATM')
print(file_list)
count = 0
for i in file_list:
file_bool = i.endswith(file_choice) # 判断字符串末尾
if file_bool:
count += 1
print(count)
''' 2.有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径'''
base_path = os.path.dirname(__file__)
db_path = os.path.join(base_path,'db目录')
for file in os.listdir(db_path):
print(file)
user_choice = input('请输入文件名>>>').strip()
if user_choice in os.listdir(db_path):
open_file_path = os.path.join(db_path,user_choice)
with open(f'{open_file_path}','r',encoding='utf8') as f:
dict_obj = json.load(f)
print(dict_obj)