共计 5377 个字符,预计需要花费 14 分钟才能阅读完成。
引入
1. 什么是 OS 模块
- 操作系统接口模块
2.OS 模块的作用
- 该模块为 Python 自带的标准库模块
- 提供了一些方便使用操作系统相关功能的函数
3. 什么是环境变量
- 一般是指在操作系统中用来指定操作系统运行环境的一些参数, 比如 : 临时文件夹位置和系统 文件夹位置 等
- 操作系统 运行系统命令 的时候, 会到这一系列 文件夹中去找 你输入的命令在不在里面
4.sys.path 与 os.environ
- sys.path环境变量 : 以列表的形式保存, 存的是一堆文件夹, python 查找模块时 会检索这个环境变量里的文件夹
- os.environ环境变量 : 是一个字典,一系列的键、值对存储在该字典中,系统环境信息全部存储在该字典中, 当你想让你这个值在整个环境中都能用的到, 你就可以把这个值往 os.environ 环境变量中添加
一. OS 系列
以下是 OS 的常用方法:
ps : "🔆" 重点使用方法
方法 | 作用 |
---|---|
os.name🔆 | 指示你正在使用的工作平台, Windows 为 'nt',Linux/Unix 为 'posix' |
os.getcwd | 得到当前工作目录,即当前 python 脚本工作的目录路径 |
os.remove(file)🔆 | 删除一个文件 |
os.rename("oldname","newname")🔆 | 重命名文件 / 目录 |
os.stat(file) | 获得文件属性 |
os.mkdir(name)🔆 | 创建目录 |
os.makedirs('dirname1/dirname2')🔆 | 可生成多层递归目录 |
os.rmdir(name)🔆 | 删除目录 |
os.removedirs(r“c:\python”) | 若目录为空,则删除,并递归到上一级目录,若也为空,则删除,依此类推 |
os.system("bash command")🔆 | 运行 shell 命令, 直接显示 |
os.linesep | 给出当前平台的行终止符,Windows 使用 '\r\n',Linux 使用 '\n', Mac 使用 '\r' |
os.listdir('dirname')🔆 | 返回指定目录下的所有文件和目录名, 包括隐藏文件,并以列表方式打印 |
os.walk(dir)🔆 | 用类似于深度遍历的方式遍历文件夹中的子文件夹以及文件, 最基本的显示方式为(root_path,[file_dirs],[files]) |
os.curdir | 返回当前目录('.') |
os.chdir('dirname') | 改变工作目录到 'dirname' |
os.pardir | 获取当前目录的父目录字符串名:('..') |
os.sep | 取代操作系统特定的路径分隔符, win 下为 "\", Linux 下为 "/" |
os.pathsep | 输出用于分割文件路径的字符串 win 下为 ";" , Linux 下为 ":" |
os.environ🔆 | 获取系统环境变量 |
- os.environ 使用(重点)
import os
print(os.environ) # environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Administrator\\AppData\\Roaming', .... 省略})
print(type(os.environ)) # <class 'os._Environ'>
# 向环境变量中设置值,取值
# 后期我们链接数据库的用户名密码, 不写死到代码中, 而是配置在环境变量中, 使用代码获取
os.environ["NAME"] = "shawn"
name = os.environ.get("NAME")
print(name) # shawn
- os.walk() 的使用
import os
dir_path = os.walk("F:\Pycharm File\PycharmProjects\python 正课 \day14")
print(dir_path) # <generator object walk at 0x000001357D44AAC8>(拿到的是一个生成器)
🍓我们对其循环取值
for i in dir_path:
print(i)
''' 輸出
('F:\\Pycharm File\\PycharmProjects\\python 正课 \\day14', ['bbbb'], ['aaa.txt', '装饰器语法糖.py'])
('F:\\Pycharm File\\PycharmProjects\\python 正课 \\day14\\bbbb', [], ['.sss.txt', 'aaa.txt'])
'''
# 我们可以发现 os.walk() 以元组为单位区分每一层, 每一层又分为三个部分(根目录路径, 根目录下的文件夹列表, 根目录下的文件列表)
🍓我们也可以将三个部分遍历出来分开查看
for root,dirs,files in dir_path:
print(root)
print(dirs)
print(files)
print("---------->")
''' 输出
F:\Pycharm File\PycharmProjects\python 正课 \day14
['bbbb']
['aaa.txt', '装饰器语法糖.py']
---------->
F:\Pycharm File\PycharmProjects\python 正课 \day14\bbbb
[]
['.sss.txt', 'aaa.txt']
---------->
'''
🍓计算一个文件夹的大小示例
import os
def dir_size():
while True:
dir_path = input(" 请输入文件夹路径(q 退出)>>").strip()
size = 0 # 初始大小
if dir_path.lower() == "q":break
if not os.path.isdir(dir_path): # 判断是否存在该目录
print(" 没找到该文件夹, 请重新输入 ")
continue
path_list = os.walk(dir_path) # 得到生成器
for root,dirs,files in path_list: # 遍历三个元素
for i in files: # 每次遍历取出文件
size += os.path.getsize(os.path.join(root,i)) # 拼接文件路径并计算大小
print(f" 该目录总大小:{size}")
dir_size()
二. OS.path 系列
os.path 系列主要用于获取文件的属性, 以下是常用方法 :
ps : "🔆" 重点使用方法
方法 | 作用 |
---|---|
os.path.abspath(path) | 返回规范化的绝对路径 (多个 "\" 只识别一个) |
os.path.basename(path)🔆 | 返回文件名 (如果传入的是路径, 会切出文件名) |
os.path.dirname(path)🔆 | 返回文件路径 (就是当前文件或目录的上一级目录) |
os.path.exists(path)🔆 | 如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。 |
os.path.getatime(path) | 返回最近访问时间(浮点型, 有秒级) |
os.path.getmtime(path) | 返回最近文件修改时间 |
os.path.getctime(path) | 返回文件 path 创建时间 |
os.path.getsize(path)🔆 | 返回文件大小,如果文件不存在就返回错误 |
os.path.isabs(path) | 判断是否为绝对路径 |
os.path.isfile(path)🔆 | 判断路径是否为文件 |
os.path.isdir(path)🔆 | 判断路径是否为目录 |
os.path.join(path1, path2,path3)🔆 | 把目录和文件名拼接成一个路径 |
os.path.normcase(path)🔆 | 转换 path 的大小写和斜杠 (只在 windows 平台上有效) |
os.path.normpath(path)🔆 | 规范 path 字符串形式 |
os.path.split(path) | 把路径分割成 dirname 和 basename,返回一个元组 |
-
os.path.normcase() 说明
⛅Linux 和 Mac 平台上, 该函数会原样返回 path, 在 Windows 平台上会将路径中所有字符转换为小写, 并将所有斜杠转换成反斜杠
import os
res = os.path.normcase('C:/SHAWN///SOng\\\hai')
print(res) # c:\shawn\\\song\\hai
-
os.path.normpath() 说明
⛅规范路径, 并且会识别 "..", 自动将其返回上一级, 分隔符会转成当前平台使用的分隔符
import os
res = os.path.normpath("C:///SHAWn\\song\../xing/")
print(res) # C:\SHAWn\xing
res2 = os.path.normpath("D:\\Shawn/song\hai/../..")
print(res2) # D:\Shawn (返回了两次)
三. OS 路径处理
1. 方法一 (通用)
- 这种方法比较通用, Python2 和 Python3 中都适用
- 可以先使用 os.path.abspath() 规范一下返回路径
import os
print(os.path.abspath(__file__)) #F:\Pycharm File\PycharmProjects\python 正课 \day19\test.py
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
print(BASE_DIR) # F:\Pycharm File\PycharmProjects\python 正课 (返回上一级两次)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR) # F:\Pycharm File\PycharmProjects\python 正课 (返回上一级两次)
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
print(BASE_DIR) # F:\Pycharm File\PycharmProjects (返回上一级三次)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
print(BASE_DIR) # F:\Pycharm File\PycharmProjects (返回上一级三次)
2. 方法二
- 使用比较简单
- op.pardir : 上一级
- op.path.normpath() : 规范 path 字符串形式
import OS
print(os.path.abspath(__file__)) #F:\Pycharm File\PycharmProjects\python 正课 \day19\test.py
BASE_DIR = os.path.normpath(os.path.join(__file__,os.pardir,os.pardir))
print(BASE_DIR) # F:\Pycharm File\PycharmProjects\python 正课 (返回上一级两次)
BASE_DIR = os.path.normpath(os.path.join(__file__,os.pardir,".."))
print(BASE_DIR) # F:\Pycharm File\PycharmProjects\python 正课 (返回上一级两次)
BASE_DIR = os.path.normpath(os.path.join(__file__,"..","..",".."))
print(BASE_DIR) # F:\Pycharm File\PycharmProjects (返回上一级三次)
四. 灭霸程序
输入文件夹路径, 将该文件下和子文件夹下所有的文件随机删除一半
import os,random
def Baba():
while True:
dir_path = input(" 请输入实验文件夹(q 退出)>>").strip()
file_list = []
if dir_path.lower() == "q":break
if not os.path.isdir(dir_path):
print(" 该路径不是一个文件夹, 请重新输入 ");continue
res = os.walk(dir_path)
for root, dirs, files in res:
for file in files:
file_list.append(os.path.join(root,file))
print(f" 正在统计文件个数...\n 该文件夹下共有:{len(file_list)}个文件 ")
y_n = input(" 你确定要启动灭霸程序吗?(y/ 任意 n)>>").strip()
if not y_n.lower() == "y":continue
rm_path = random.sample(file_list,len(file_list)//2)
for i in rm_path:
file_list.remove(i);os.remove(i)
print(f" 删除了文件:{i}")
print(f" 该文件夹下剩余:{len(file_list)}个文件 ")
Baba()
正文完