os模块

os模块(重要)

os模块简介

os模块主要与操作系统打交道

目前,计算机上主流的操作系统有Windows、Unix、Mac OS等,os模块为多操作系统的访问提供了相关功能的支持,涉及对文件相关操作功能的实现,系统访问path路径的操作,shell命令行操作,Linux扩展属性的操作,流程管理,CPU等硬件相关信息的获取,基于操作系统的真正的随机数的操

Os库提供通用的、基本的操作系统交互功能:

  1. Os库是python标准库,包含几百个函数
  2. 常用路径操作、进程管理、环境参数等几类
  3. 路径操作:os.path子库,处理文件路径及信息
  4. 进程管理:启动系统中其他程序
  5. 环境参数:获得系统软件硬件信息等环境参数

创建目录

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')  # 可以一次性创建三个 如下图

image

删除目录

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

image

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'

image

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无权执行该文件')

示例:
image

做题

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)
posted @ 2022-10-20 16:53  passion2021  阅读(219)  评论(0编辑  收藏  举报