前言
入门到进阶的知识点基本都学习了,可能有一些遗漏的请谅解,不过只要坚持学习下去,在后面的学习中进行查缺补漏。
根据Python crash course书中的进度,要准备开始写小项目了。在这之前,我看了Python的官方教程,里面有很多标准库的介绍和学习,想了想这些也记录一下。
教程中大概包含20个模块,不会一次讲完,留下消化吸收的时间。
这里贴一下教程地址:https://docs.python.org/zh-cn/3/tutorial/stdlib.html
操作系统接口
os模块是Python标准库中的一个核心模块,它提供了大量与操作系统交互的功能。
文件和目录操作
- 创建、删除、重命名:
os.mkdir()
:创建目录。os.rmdir()
:删除空目录。os.rename()
:重命名文件或目录。
import os# 创建目录
new_dir = "test_directory"
os.mkdir(new_dir)
print(f"Directory '{new_dir}' created.")# 删除目录
os.rmdir(new_dir)
print(f"Directory '{new_dir}' removed.")
目录就已经创建成功了,注意一下之前讲过的相对路径和绝对路径。
接下来我们改一下目录的名字。
# 新目录名
new_dir_name = "new_directory"# 使用os.rename()函数重命名目录
try:os.rename("test_directory", new_dir_name)print(f"Directory 'test_directory' has been renamed to '{new_dir_name}'.")
except OSError as e:print(f"Error: {e.strerror}")
这里我们使用了之前学了异常处理,当你指定的旧目录不存在是会,会抛出错误信息,这里我们提前捕获处理。不信的话你可以试试哦。
最后我们把这个目录删除掉。
# 删除目录
os.rmdir("new_directory")
print(f"Directory 'new_directory' removed.")
通过对比,我们很明显的发现先创建,再修改的目录已经被删除掉了
由于贴图占位置过多,后续的有些示例我多个示例贴一个图,或者不贴图只贴出示例代码。
示例代码可以拿去执行试试,但是我建议自己写。
- 获取文件属性:
os.stat()
:获取文件或目录的状态信息,如大小、修改时间。
print(os.stat("part_one.py"))
大家可以看到,输出了一堆东西,我简单介绍一下,有兴趣的可以自行深入了解。
- st_mode: 文件的模式,包括文件类型(如普通文件、目录、符号链接等)和权限位。是一个包含文件类型和权限位的比特掩码
- st_ino: 文件的inode编号(Unix-like系统)。在Windows系统中,这个值可能没有意义。
- st_dev: 文件所在设备的ID。
- st_nlink: 文件的硬链接数。
- st_uid: 文件所有者的用户ID。
- st_gid: 文件所属组的组ID。
- st_size: 文件的大小(以字节为单位)。
- st_atime: 上次访问时间(时间戳,单位通常是秒)。
- st_mtime: 上次修改时间(时间戳,单位通常是秒)。
- st_ctime: 上次状态改变时间(如权限或所有权变更的时间,时间戳,单位通常是秒)。在某些系统上,这也可以表示文件的创建时间。
- 权限与所有权管理:
os.chmod()
:改变文件权限。os.chown()
:改变文件的所有者和组。
了解一下就行。
在操作文件权限和所有权前,我们一般需要通过os.stat()函数获取文件的信息。就比如我们的part_one.py文件。
文件类型
S_IFDIR: 目录。如果st_mode的最高位(第12位)为1,则表示这是一个目录。
S_IFREG: 普通文件。如果最高位为0,并且接下来的位(第11位)为1,则表示这是一个常规文件。
S_IFLNK: 符号链接。如果第10位为1,则表示这是一个软链接(符号链接)。
S_IFCHR: 字符设备文件。如果第6位为1,第3位至第5位不全为0,则表示字符设备。
S_IFBLK: 块设备文件。如果第6位为1,第3位至第5位全为0,则表示块设备。
S_IFIFO: FIFO(命名管道)。如果第0位为1,则表示这是一个FIFO。
权限位
权限位分为三组,分别代表文件所有者、所属组和其他用户的权限。
每组三位,分别代表读、写、执行权限:
读权限 (4):如果位设置,则有读权限。
写权限 (2): 如果位设置,则有写权限。
执行权限 (1): 如果位设置,则有执行权限。
例如,一个典型的可执行文件权限可能是755,这意味着: 所有者有读、写、执行权限(4+2+1=7),所属组和其他用户只有读和执行权限(4+1=5)
路径操作
-
工作目录操作:
os.chdir(path)
:改变当前工作目录。os.getcwd()
:获取当前工作目录。os.makedirs()
:创建多级目录。os.rmdir()
:删除空目录。
-
目录内容列出:
os.listdir(path=None)
:列出指定目录下的文件和目录名。
-
拼接与规范化:
os.path.join()
:连接路径名。os.path.abspath()
:返回规范化的绝对路径。
-
存在性检查:
os.path.exists()
:检查路径是否存在。os.path.isfile()
:检查是否为文件。os.path.isdir()
:检查是否为目录。
-
路径分解:
os.path.split()
:分割路径为目录和文件名。os.path.dirname()
:获取路径中的目录部分。os.path.basename()
:获取路径中的文件名部分。
# 当前目录
current_directory = os.getcwd()
print(f"当前工作目录: {current_directory}")
# 更改目录
new_path = "E:/python_project/learn_base/x/day6" # 更改为实际的目录路径
os.chdir(new_path)
print(f"已切换到目录: {os.getcwd()}")
# 创建多级目录
new_dir_path = "E:/python_project/learn_base/x/day7/os"
os.makedirs(new_dir_path, exist_ok=True) # exist_ok=True 避免在目录已存在时抛出异常
print(f"目录已创建: {new_dir_path}")
# 删除空的目录
dir_to_remove = "E:/python_project/learn_base/x/day7/os"
os.rmdir(dir_to_remove) # 确保目录为空
print(f"目录已删除: {dir_to_remove}")
# 拼接路径
path_parts = ("home", "user", "documents")
combined_path = os.path.join(*path_parts)
print(f"合并后的路径: {combined_path}")
# 绝对路径
relative_path = "./part_one.py"
absolute_path = os.path.abspath(relative_path)
print(f"绝对路径: {absolute_path}")
# 分割文件名和目录名
full_path = "/home/user/documents/example.txt"
dir_name, file_name = os.path.split(full_path)
print(f"目录部分: {dir_name}, 文件名部分: {file_name}")
# 文件名
full_path = "E:/python_project/learn_base/x/day7/part_one.py"
base_name = os.path.basename(full_path)
print(f"基本文件名: {base_name}")
# 目录路径
directory = os.path.dirname(full_path)
print(f"目录部分: {directory}")
# 检查是否存在
path_to_check = "E:/python_project/learn_base/x/day7/part_one.py"
if os.path.exists(path_to_check):print("路径存在")
else:print("路径不存在")
# 检查是否文件
file_path = "/path/to/some/file.txt"
if os.path.isfile(file_path):print("这是一个文件")
else:print("这不是一个文件或路径不存在")
# 检查是否目录
dir_path = ":/python_project/learn_base/x/day7"
if os.path.isdir(dir_path):print("这是一个目录")
else:print("这不是一个目录或路径不存在")
环境变量管理
- 读取与设置:
os.environ.get(key[, default])
:获取环境变量值。os.environ['environ_name'] = 'environ_value'
:设置一个新的环境变量。del
:设置默认环境变量值。os.environ.setdefault(key, value)
:设置默认环境变量值。
# 读取PATH环境变量
path_var = os.environ.get('PATH')
print(f"PATH环境变量的值: {path_var}")
# 设置一个新的环境变量
os.environ['MY_VARIABLE'] = 'Hello, World!'
print(f"新设置的环境变量 MY_VARIABLE: {os.environ['MY_VARIABLE']}")
# 假设之前设置了环境变量MY_VARIABLE
if 'MY_VARIABLE' in os.environ:del os.environ['MY_VARIABLE']if 'MY_VARIABLE' not in os.environ:print("环境变量 MY_VARIABLE 已被删除")else:print("删除环境变量 MY_VARIABLE 失败")
else:print("环境变量 MY_VARIABLE 不存在")
# 尝试获取名为 'MY_APP_SETTING' 的环境变量,如果不存在,则设置默认值为 'default_value'
my_setting = os.environ.setdefault('MY_APP_SETTING', 'default_value')
print(f"环境变量 'MY_APP_SETTING' 的值为: {my_setting}")
操作系统信息
-
系统类型:
os.name
:表示当前平台类型(如’posix’、‘nt’)。
-
详细系统信息(Unix-like系统):
os.uname()
:提供系统信息,如内核名称、主机名等。注意Windows无法执行这个函数。
另外关于对操作系统的操作模块,更推荐使用platform。
# 输出可能是 'posix'(代表类Unix系统,包括Mac和Linux)或 'nt'(代表Windows系统)
os_type = os.name
print(f"操作系统类型: {os_type}")
结尾
通过os
模块,我们能够轻松地进行文件系统操作、系统管理任务及实现与操作系统紧密结合的应用程序。重在记住有哪些功能,常用函数的参数,返回值等信息。
作业
- 根据本篇文章示例函数在自己本机上编写代码并执行。
- 了解platform模块的功能。