内置模块之os、sys模块

内置模块之os、sys模块

os与sys模块的区别

  • os模块主要与操作系统打交道
  • sys模块主要与python解释器打交道

os模块

os模块主要用于对接我们的操作系统。

os模块主要有以下功能,这些功能都需要导入os模块使用。

import os

语句 功能
os.mkdir()\os.makedirs 创建目录\多级目录
os.rmdir()\os.removedirs() 删除目录\多级目录(空目录)
os.listdir()\os.listdir('路径') 查看执行\指定文件夹下的内容名称
os.rename() 重命名
os.remove() 删除文件
os.getcwd() 获取当前工作目录
os.chdir() 切换工作目录
os.path.abspath() 获取文件的绝对路径
os.path.dirname() 获取文件所在的文件夹路径
os.path.exists()\isfile()\isdir() 判断文件路径\文件\文件夹是否存在
os.path.join() 路径拼接
os.path.getsize() 获取文件大小(字节为单位)

创建目录

# 创建单级目录
os.mkdir('d1')  # 相对路径建目录(文件夹),在执行文件所在路径下创建目录
os.mkdir(r'd1\d2\d3')  # 运行失败,不可以创建多级目录,仅可创建单级目录
os.mkdir('d1\d2')  # 在d1已创建的情况下,可以通过相对路径在d1下创建d2
# 创建多级目录
os.makedirs(r'd1\d2\d3')  # 可以创建多级目录
os.makedirs(r'd11')  # 也可以创建单级目录

删除目录

# 删除单级目录
os.rmdir(r'd1\d2\d3')  # d3被删除,只要输入相对路径,会将末梢最底层的文件夹作为删除对象
os.removedirs(r'd1')  # 报错,因为d1内还有d2文件夹,而os模块只能删空目录
os.removedirs(r'd1\d2')  # d2是空的,删完后d1也空,所以d1也被删,删除了多级目录

查看文件夹下的内容

print(os.listdir())  # 查看执行文件所在文件夹的内容,返回列表,显示所有文件名
print(os.listdir('d1'))  # 查看指定文件夹的内容,可以是相对路径或者绝对路径

重命名\移动路径

os.rename(r'd1\d2', r'd1\d3')  # 将d2文件夹名改为d3
os.rename(r'd1\d3', r'd2\d3')  # 将d1文件夹下的d3转移到d2路径下(如果d2文件夹存在的话)

删除文件

os.remove('d1\d2\f1.txt')  # 删除指定路径下的文件(权限较低)

获取当前工作目录

print(os.getcwd())  # 拿到执行文件所在文件夹(如果没有切换工作目录的话)

切换工作目录

os.chdir('d1')  # 根据绝对路径切换工作目录
print(os.getcwd())  # 相比较没更改之前,多了个\d1

获取文件的绝对路径\文件夹路径

一般来说这个语句常搭配__file__使用,__file__表示当前文件。而下面的函数需要传入文件类型的参数。

print(os.path.abspath(__file__))  # 获取当前文件的绝对路径
print(os.path.dirname(__file__))  # 获取当前文件所在文件夹的绝对路径

判断文件路径\文件\文件夹是否存在

print(os.path.exists(r'd1\d2'))  # 判断路径\文件是否存在
print(os.path.isfile(r'd1\d2\f1.txt'))  # 只判断文件是否存在(多加了个文件判断)
print(os.path.isdir(r'd1\d2\d3'))  # 只判断路径是否存在(多加了个路径判断)

路径拼接(**)

路径拼接广泛应用于,新建文件夹到某个文件夹下,新建文件到某个文件夹下(w模式的open)。

如:我们要往执行文件所在文件夹下的db文件夹写入用户文件,就可以用到路径拼接。

ROOT_PATH = os.path.dirname(__file__)  # 执行文件就在根目录下,获取根目录
DB_PATH = os.path.join(ROOT_PATH, 'db')  # 拼接db文件夹路径
if not os.path.isdir(DB_PATH):  # 如果没有创建db文件夹
    os.makedirs(DB_PATH)  # 则创建对应的文件夹
user_path = os.path.join(DB_PATH, 'name1.txt')  # 根据名字进行命名,并拼接到db文件夹后
with open(user_path, 'w', encoding='utf8') as f:  # w模式下,文件不存在则创建新文件
    f.write('我存储了name1用户的数据')

获取文件大小

print(os.path.getsize(r'db\name1.txt'))  # 32  # 得到指定路径文件的数据大小,单位为字节

sys模块

sys模块主要对接我们的python解释器。

语句 功能
sys.path 获取系统环境变量
sys.getrecursionlimit() 获取解释器最大递归深度
sys.setrecursionlimit() 更改解释器最大递归深度
sys.version 获取解释器版本号
sys.platform 平台信息
sys.argv 从文件外部得到参数

系统环境变量

之前在模块名查找顺序那里描述过,如果不是内置模块,则会在系统环境变量里面的路径依次寻找。

sys.path  # 本身是列表
# 列表的第一项一般是执行文件所在的文件夹

image

获取\更改解释器最大递归深度

为了防止程序无限递归占用内存,而设置的保护机制。

print(sys.getrecursionlimit())  # 1000
sys.setrecursionlimit(1500)  # 将深度更改为1500
print(sys.getrecursionlimit())  # 1500

获取解释器版本号\平台信息

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.platform)  # win32

从文件外部得到参数(了解)

# a.py内部书写以下代码
import sys
print(sys.argv)
# 如果直接在pycharm里面运行此py文件,那么运行结果是:
['C:/pycharm_project/pythonProject/a.py']  # 文件的绝对路径

但是如果我们通过命令行按下图来执行,结果会不一样:

image

额外得到了三个参数,并添加到了列表中,用这种方法我们就可以在执行文件时,要求用户密码校验了,如:

import sys
_, user, pwd = sys.argv  # 解压赋值得到user和pwd
if user == 'leethon'  and pwd == '123':
    执行其他功能代码
练习
# 有一个目录文件下面有一堆文本文件
# eg:
# db目录
# J老师视频合集
# R老师视频合集
# C老师视频合集
# B老师视频合集
# 文件内容自定义即可
# -要求循环打印出db目录下所有的文件名称让用户选择
# -用户选择哪个文件就自动打开该文件并展示内容
# -涉及到文件路径全部使用代码自动生成
# -不准直接拷贝当前计算机固定路径
import os
db_path = os.path.join(os.path.dirname(__file__), 'db')
while True:
    file_sets = os.listdir(db_path)
    for file_set in file_sets:
        print(file_set)
    choice = input('选择文件夹:').strip()
    if choice in file_sets:
        break
    print('请检查你输入的文件夹名')
while True:
    sub_db_path = os.path.join(db_path, choice)
    files = os.listdir(sub_db_path)
    if not files:
        print('该文件夹没有文件')
        break
    for file in files:
        print(file)
    choice = input('选择文件:').strip()
    if choice in files:
        file_path = os.path.join(sub_db_path, choice)
        with open(file_path,'r',encoding='utf8')as f:
            print(f.read())
        break
    print('请检查你输入的文件名')
posted @ 2022-10-20 20:37  leethon  阅读(141)  评论(0编辑  收藏  举报