Python学习系列 -初探标准库之os库

系列文章目录

第一章 初始 Python
第二章 认识 Python 变量、类型、运算符
第三章 认识 条件分支、循环结构
第四章 认识 Python的五种数据结构
第五章 认识 Python 函数、模块
第六章 认识面向对象三大特性
第七章 初探标准库之os库



前言

人生苦短、我用Python!

Python的魅力,犹如星河璀璨,无尽无边。
其强大的标准库和丰富的第三方库,恰似一片生机勃勃的森林,为开发者们提供了源源不断的资源和支持。

无论是处理字符串、读写文件这样的基础任务,还是并发编程、数据分析等高级挑战,Python的标准库和三方库都能应对自如,满足各种需求。

在这片广袤的“森林”中,隐藏着许多Python标准库中的珍贵模块,如os、sys、re等。它们如同森林中的璀璨明珠,熠熠生辉,为开发者的工作提供着不可或缺的支持。

而在Python的生态系统中,还有许多备受赞誉的三方库,如NumPy、Pandas、openpyxl、requests、selenium、pyqt等。这些库如同森林中的珍稀物种,以其独特的功能和卓越的性能,助力开发者们更高效地完成工作。

os、pathlib和shutil是与路径操作密切相关的库,这些库在开发过程中扮演着不可或缺的角色,本文先介绍一下os,后续介绍更多。


os库是Python标准库之一,全称为Operating System,提供了与操作系统交互的各种函数。

  • os库主要用于以下用途:
    • 目录操作
    • 文件操作
    • 路径操作
    • 环境变量操作
    • 进程操作

一、目录操作

1.获取当前目录


current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)

current_path = os.getcwdb() # 获取当前工作目录的绝对路径(值以Unicode编码返回)
print(current_path)

current_path = os.curdir    # 获取当前工作目录,以.表示
print(current_path)

current_path = os.pardir    # # 获取当前工作目录,以..表示
print(current_path)

2.创建目录

# 注意window路径分隔符是\,linux或macos是/
current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)

# 在当前目录下创建单层目录
os.mkdir(current_path + "/test")	
# 如果目标目录已存在,则抛出异常:FileExistsError: [Errno 17] File exists

# 在当前目录下创建多层目录
os.makedirs(current_path + "/test/d1/d2") 
# 如果目标目录已存在,则抛出异常:FileExistsError: [Errno 17] File exists

3.删除目录

# 注意window路径分隔符是\,linux或macos是/
current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)


# 在当前目录下删除单层目录
os.rmdir(current_path + "/test")	
# 如果目标目录不存在,会抛出异常:FileNotFoundError: [Errno 2] No such file or directory
# 如果目标目录不是单层目录或目录中存在文件,会抛出异常:OSError: [Errno 66] Directory not empty

# 在当前目录下删除多层目录
os.removedirs(current_path + "/test/d1/d2")
# 注意,如果指定删除的目录不为空或还有更深的目录,如d2目录下还有d3目录,则会抛出异常:OSError: [Errno 66] Directory not empty

4.重命名目录

# 注意window路径分隔符是\,linux或macos是/
current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)

# 在当前目录下创建单层目录
os.mkdir(current_path + "/test")

# 将新创建的目录重命名
os.rename(current_path + "/test", current_path + "/test_dir")

5.获取目录下所有的一级内容

# 注意window路径分隔符是\,linux或macos是/
current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)

# 在当前目录下创建单层目录
os.mkdir(current_path + "/test1")
os.mkdir(current_path + "/test2")

# 获取指定路径下所有的文件、目录内容,但不包含目录中的子文件
dirs = os.listdir(current_path)
print(dirs)	# ['demo.py', 'test1', 'test2']

6.判断目录是否存在

# 注意window路径分隔符是\,linux或macos是/
current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)

print(os.path.exists(current_path)) # True
print(os.path.exists(current_path + "/test1")) # 目标目录不存在,返回False

os.mkdir(current_path + "/test1")
print(os.path.exists(current_path + "/test1")) # 目标目录创建后存在,返回True

7.判断是否是目录

# 注意window路径分隔符是\,linux或macos是/
current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)

print(os.path.isdir(current_path))  # True
print(__file__)  # 当前python文件的绝对路径,current_path + demo.py
print(os.path.isdir(__file__))  # False

二、文件操作

1.创建/读写文件

# 注意window路径分隔符是\,linux或macos是/
current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)

# os.O_RDONLY   以只读的方式打开
# os.O_WRONLY   以只写的方式打开
# os.O_RDWR     以读写的方式打开
# os.O_NONBLOCK 打开时不堵塞
# os.O_APPEND 以追加的方式打开
# os.O_CREAT  创建或打开文件
# os.O_TRUNC  打开一个文件并截断它的长度为零

# 在当前工作目录中新建一个文件,demo.txt
demo_file_path = current_path + "/demo.txt"
print(demo_file_path)
# os.open() 需要三个参数,path需要打开或创建的文件路径,flags文件打开的模式,mode新创建文件的权限模式
# flags参数值对应上述说明选择,mode参数值默认是0o666,表示计算机内用户、组、其他三种身份都有读写的权限
# 创建或打开文件
fd = os.open(path=demo_file_path, flags=os.O_RDWR | os.O_CREAT, mode=0o666)
# 向文件内写入数据
os.write(fd, "Hello World".encode())
# 关闭文件
os.close(fd)

2.删除文件

demo_file_path = current_path + "/demo.txt"
print(demo_file_path)

os.remove(demo_file_path)	# 删除文件

3.重命名文件

同1.1.4.重命名目录一致

4.文件时间

os.path.getatime(path)	# 1611364716.8618789
# 返回path对应文件或目录上一次访问时间,a表示access 访问
os.path.getmtime(path)
# 返回path对应文件或目录最近一次的修改时间,m表示modify 修改
os.path.getctime(path)
# 返回对应文件或目录的创建时间,c表示create 创建

time.ctime(os.path.getctime(path)
# 'Sat Jan 23 09:18:36 2021'

三、路径操作

1.路径拼接

import os

current_path = os.getcwd()  # 获取当前工作目录的绝对路径
print(current_path)  # /Users/xxxx/PythonWorkspace/第20课:Python标准库初探

test_dir1 = "test1"
test_dir2 = "test2"
file_name = "demo.txt"
path = os.path.join(current_path, test_dir1, test_dir2, file_name)
print(path)  # /Users/xxxx/PythonWorkspace/第20课:Python标准库初探/test1/test2/demo.txt

2.路径分裂

# 引用1.3.1的path变量值
paths = os.path.split(path)
print(paths)    # 将路径和最后一层文件或目录分裂成元祖
# ('/Users/xxxx/PythonWorkspace/第20课:Python标准库初探/test1/test2', 'demo.txt')

3.获取路径最后目录或文件名称

# 引用1.3.1的path变量值
name = os.path.basename(path)
print(name) # demo.txt

4.获取文件名称的后缀

# 引用1.3.1的path变量值
suffix = os.path.splitext(path)
print(suffix)  # ('/Users/xxxx/PythonWorkspace/第20课:Python标准库初探/test1/test2/demo', '.txt')

# 注意,如果path不是文件路径,而是目录路径则没有后缀,元祖的第二位元素则是空值

5.获取路径的路径(父级)

# 引用1.3.1的path变量值
dirname_1 = os.path.dirname(path)
print(dirname_1)  # /Users/xxxx/PythonWorkspace/第20课:Python标准库初探/test1/test2
dirname_2 = os.path.dirname(dirname_1)
print(dirname_2)  # /Users/xxxx/PythonWorkspace/第20课:Python标准库初探/test1

6.获取绝对路径

# 引用1.3.1的path变量值
abspath = os.path.abspath(path)
print(abspath)  # /Users/xxxx/PythonWorkspace/第20课:Python标准库初探/test1/test2/demo.txt

四、环境变量操作

1.获取所有环境变量

import os

# 获取所有环境变量
all_env_vars = os.environ
print(type(all_env_vars), all_env_vars)

# 打印所有环境变量
for key, value in all_env_vars.items():
    print(f"{key}: {value}")

2.获取指定环境变量1

import os

# 获取环境变量名为"MY_ENV_VAR"的值,如果未设置则返回默认值None
my_var = os.environ.get("PYTHONPATH")

# 打印获取的值
print(my_var)

3.获取指定环境变量2

import os

# 尝试获取环境变量 "MY_ENV_VAR" 的值,如果未设置则设置为默认值 "default_value"
os.environ.setdefault("MY_ENV_VAR", "default_value")

# 打印环境变量 "MY_ENV_VAR" 的值
print(os.environ.get("MY_ENV_VAR"))

五、进程操作

1.执行shell命令

import os

os.system("open myfile.txt")  # 在 macOS 上打开名为 "myfile.txt" 的文件

# 获取当前工作目录中所有文件或目录的详细信息
print(os.system("ls -l"))

# 执行ping命令
print(os.system("ping www.baidu.com"))

2.用新进程执行程序

import os
os.spawnlp(os.P_NOWAIT, '/usr/bin/python3', 'python3', 'script.py')  # 运行 Python3 script.py 脚本

3.给指定进程发信号

import os
import time
p = os.spawnl(os.P_NOWAIT, '/usr/bin/sleep', 'sleep', '10')  # 启动一个睡眠10秒的进程
time.sleep(2)  # 等待2秒,确保进程已经开始运行
os.kill(p, os.SIGTERM)  # 向该进程发送终止信号

4.等待子进程结束后返回进程的状态

import os
import time

# 启动一个子进程,该进程会睡眠5秒
pid = os.spawnl(os.P_NOWAIT, '/usr/bin/sleep', 'sleep', '5')

# 使用 os.waitpid() 等待子进程结束
# os.WNOHANG 使得 os.waitpid() 在子进程仍在运行时不阻塞
while True:
    try:
        os.waitpid(pid, os.WNOHANG)
        break  # 子进程已结束,跳出循环
    except OSError:
        # 子进程仍在运行,等待一会儿后再次尝试
        time.sleep(1)

print("子进程已结束")

5.获取当前进程的PID

import os
pid = os.getpid()  # 获取当前 Python 进程的 PID
print(f"当前 Python 进程的 PID 是: {pid}")

总结

os库提供了许多与操作系统交互的功能,包括文件和目录的创建、删除、移动等。它可以帮助我们更好地组织和处理文件路径,使得跨平台开发更加方便。

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要休息的KK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值