os,即操作系统,os模块提供一些与操作系统交互的接口,是一个非常强大的内置包。由于其内容过多,很大一部分功能我也没用过,如有纰漏之处还望指出,在此谢过。
(返回)类型 | 成员变量 | |
---|---|---|
os.name |
字符串 | 操作系统名称,取值为posix , nt , java 分别代表当前系统为Linux, Windows, java虚拟机 |
os.environ |
字典 | 当前系统环境变量的键值对 |
getcwd() |
字符串 | 返回当前工作目录(get the current working directory) |
getcwdb() |
字节串 | 返回当前工作目录 |
os.getpid() |
int | 返回当前进程ID |
os.getppid() |
int | 返回父进程ID |
os.abort() |
取消当前进程 | |
os.getlogin() |
返回当前用户 | |
os.cpu_count() |
int | 返回CPU数目 |
supports_常量
均与操作系统(OS)相关,除supports_bytes_environ
外均为集合,下面为其在Windows中的值。
>>> os.supports_bytes_environ
False #若OS上原生环境类型是字节型则为True
>>> os.supports_effective_ids
set() #若当前平台支持effective_ids,则返回os.access()
>>> os.supports_fd #返回支持文件描述符的函数
{<built-in function stat>, <built-in function truncate>}
>>> os.supports_dir_fd #返回支持dir_fd的函数
set()
>>> os.supports_follow_symlinks #返回follow_symlinks可为False的函数集合
{<built-in function stat>}
输入 | 输出 | |
---|---|---|
listdir |
目录路径 | 输入路径的子路径构成的list 默认输入为当前的工作路径 |
scandir |
目录路径 | 输入路径的子路径构成的迭代器 |
walk |
目录路径 | 输入路径的子路径构成的迭代器 |
mkdir |
目录路径 | 创建一个新的文件夹 该文件夹的父级目录必须已经存在 |
makedir |
目录路径 | 递归创建新文件夹 |
remove |
文件路径 | 删除文件 |
rmdir |
目录路径 | 删除文件夹,文件夹下不得有子文件夹 |
removedirs |
目录路径 | 递归删除文件夹 |
chdir |
目录路径 | 改变当前工作路径 |
add_dll_director |
路径 | 路径添加到DLL搜索路径 |
get_exec_path |
路径 | 返回用于搜索可执行文件的目录列表 为No,将使用 environ |
fspath |
路径 | 返回路径的文件系统表示。 |
os.rename(src,dst)
,路径重命名,将src
重命名为dst
。如果src
和dst
在不同的目录下,则会进行剪切粘贴。这个操作逻辑和命令行是一致的。
os.renames(src,dst)
,可创建中间路径的重命名,即递归重命名。
在os
包中,makedirs
, renames
还有removedirs
这三个s
结尾的文件操作函数,都属于递归性质的路径操作。其中mkdirs
, renames
允许目标路径的中间路径不存在;removedirs
允许删除包含子路径的路径。
>>> os.mkdir(r'test\test') #由于.\test不存在,所以会报错
Traceback (most recent call last):
File "" , line 1, in <module>
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'test\\test'
>>> os.makedirs(r'test\test')
os.replace
顾名思义即替换,相当先删除,再重命名,os.replace('1.txt','2.txt')
等价为
os.remove('2.txt')
os.rename('1.txt','2.txt')
查看源码会看到,在os.py
中有这样几行
if 'posix' in _names:
name = 'posix'
linesep = '\n'
from posix import *
#省略若干代码
elif 'nt' in _names:
from nt import *
try:
from nt import _exit
__all__.append('_exit')
except ImportError:
pass
import ntpath as path
#。。。
该子模块的内容相对来说用得比较多,此前曾经总结过:os.path详解
关于open和文件类的内容放在了基础功能->文件读写部分,在此讲解部分函数的作用。
fd
为文件描述符,一般是正整数,用于链接某个打开的文件。
输入为fd 的单参函数 |
|
---|---|
close |
关闭fd |
device_encoding |
如果连接到终端,则返回fd对应的设备,否则返回None |
fdatasync |
强制写入fd |
fstat |
获取fd 的状态 |
fstatvfs |
返回文件的系统信息(Winows无) |
get_blocking |
获取文件的阻塞模式(Windows无) |
最常用的应该是os.write(fd,str)
,将字符串str
写入fd
。
copy_file_range(src,dst,count,offset_src=None,offset_dst)
:从src复制count到dst,offset可设置对应的偏移量
|closerange(fd_L,fd_H)
|关闭从fd_L
到fd_H
之间的所有文件
Windows中没有的:
fchmod(fd, mode)
:将fd
的权限修改为mode
fchown(fd, uid, gid)
:将fd
的所有者和组ID改为uid和gid。fdopen
与open
相似,区别在于其第一个参数为整数。关于open
以及更多python文件读写功能的操作,请移步:【python标准库】最深入的文件读写详解。
os
模块中封装了一个非常有用的函数,即os.system
,实现了一个非常强大的功能——将字符串转化为命令行的命令。
>>> import os
>>> os.system('tree') #tree,输出当前路径下的树状图
卷 文档 的文件夹 PATH 列表
卷序列号为 76C2-48F3
E:.
└─__pycache__
0
>>> os.system('calc') #系统打开了计算器
0
与system
相对的应该是kill(sig,pid)
,其功能为杀死某个进程,其功能为将一个信号sig发送给某个进程pid
。
此外,get_terminal_size
可返回命令行窗口的尺寸。
os.exec
这些函数用于执行一个新的程序,根据其传入参数数据类型的不同可分为两类,分别是l
和v
,前者输入为多个参数,后者输入为多个参数组成的元组。
例如os.execl(pro,c1,c2,...cN)
等价于os.execv(pro,(c1,c2,...cN))
。
execl |
execle |
execlp |
execlpe |
execv |
execve |
execvp |
execvpe |
后缀e
表示执行命令时,读取特定的环境变量作为默认环境。故以execv
为例,其输入参数为os.execv(pro,tup,env)
,其中tup
表示由各参数组成的元组。
后缀p
表示在执行命令时,使用系统环境变量path
中的路径来查找命令。
此为状态对象,主要作为 os.stat()、os.fstat() 和 os.lstat() 的返回值,其常用属性主要包括
st_mode | 文件模式:包括文件类型和文件模式位(即权限位)。 |
st_ino | Unix上表示索引节点号 Windows上表示文件索引号 |
st_dev | 设备标识符 |
st_nlink | 硬链接数量 |
st_uid | 文件所有者的用户 ID。 |
st_gid | 文件所有者的用户组 ID。 |
st_size | 文件大小 |
st_blocks | 字节块数,每块512字节。文件稀疏时,可能小于st_size/512。 |
st_blksize | 首选 块大小,用于提高文件系统 I/O 效率。 |
st_rdev | 设备类型(如果是 inode 设备)。 |
st_flags | 用户定义的文件标志位。 |
与时间相关
访问时间 | 修改时间 | 元数据更改时间(Unix) 创建时间(Windows) |
|
---|---|---|---|
秒单位 | st_atime | st_mtime | st_ctime |
纳秒单位 | st_atime_ns | st_mtime_ns | st_ctime_ns |