os 全称 operation system ,即操作系统。在 Python 中的 os 模块提供了操作系统的相关功能,如操作路径、文件增删等。常使用操作系统 Terminal 终端命令的同学可能会觉得很熟悉,因为其中的部分命令是类似的。下面将介绍一些常用的命令。

如有其他命令需要,可参考 Python 官网的相关文档:https://docs.python.org/3.7/library/os.html 或调用 help(os) 命令获取帮助文档。

1、os.name

  • 返回操作系统名称。目前已注册的名称为: “posix”, “nt”, “java”,其中posix指Linux操作系统,nt指Windows系统(java暂时不知道是什么操作系统)。
# input code
import os
print(os.name)
# output result
nt

2、os.sep

  • 返回操作系统目录分隔符。Windows返回 \ ,Linux返回 / 。
# input code
print(os.sep)
# output result
\

3、os.getcwd()

  • 返回当前所在工作路径。getcwd 的全称应该是 get current working directory。
# input code
print(os.getcwd())
# output result
C:\Users\Administrator

4、os.chdir(path)

  • 更改当前工作路径为 path。chdir 的完整表述应该是 change the current working directory to the specified path,这里使用 change 和 directory 的部分字母作为简写。
# input code
os.chdir(r'./Downloads')  # 更改工作路径
print(os.getcwd())  # 查看当前工作路径
# output result
C:\Users\Administrator\Downloads  # 已完成路径更改操作

5、os.listdir(path=’.’)

  • 返回 path=’.’ 目录下的所有文件。listdir 即 return a list containing the names of the files in the directory。
# input code
print(os.listdir())  # path='.'可省略,也可自行指定
# output result
['pycharm-community-2020.2.4.exe',
 'torch-1.5.1-cp35-cp35m-win_amd64.whl',
 'torchvision-0.6.1-cp35-cp35m-win_amd64.whl']  # 比如所在目录下存在这么三个文件

6、os.mkdir(path)

  • 新建目录 path,例如创建一个名为 “new_file” 的文件夹。这里的 mk 可以理解为 make 的简称。(若想要多层递归目录,可使用 os.makedirs() 命令)
# input code
os.mkdir(r'./new_file')
print(os.listdir())
# output result
['new_file',  # 成功创建new_file文件
 'pycharm-community-2020.2.4.exe',
 'torch-1.5.1-cp35-cp35m-win_amd64.whl',
 'torchvision-0.6.1-cp35-cp35m-win_amd64.whl']

7、os.rmdir(path)

  • 删除目录 path ,例如删除刚刚新建的 new_file 文件夹,这里的 rm 可以理解为 remove 的简称。(若想要递归删除可以使用 os.removedirs() 命令)
# input code
os.rmdir(r'./new_file')
print(os.listdir())
# output result
['pycharm-community-2020.2.4.exe',
 'torch-1.5.1-cp35-cp35m-win_amd64.whl',
 'torchvision-0.6.1-cp35-cp35m-win_amd64.whl']  # 成功删除new_file文件夹

8、os.stat(path)

  • 返回关于所指定路径 path 的统计信息。例如当前路径的统计信息:
# input code
print(os.stat('.'))
# output result
os.stat_result(st_mode=16749, st_ino=562949953421957, st_dev=3392693689, st_nlink=1, st_uid=0, st_gid=0, st_size=20480, st_atime=1614585623, st_mtime=1614585623, st_ctime=1540015147)

9、os.path.abspath(path)

  • 返回指定路径 path 的绝对路径(标准化的)。
# input code
print(os.path.abspath('.')) # 就以当前目录为例
# output result
C:\Users\Administrator\Downloads

10、os.path.dirname(path)

  • 返回指定目录 path 的父目录。
# input code
print(os.path.dirname(r'\Administrator\Downloads'))
# output result
\Administrator

11、os.path.split(path)

  • 将路径 path 拆分为一对,即 (head, tail) ,其中,tail 是路径的最后一部分,而 head 里是除最后部分外的所有内容。因此,tail 部分不会包含斜杠。
# input code
print(os.path.split(r'C:\Users\Administrator\Downloads'))
# output result
('C:\\Users\\Administrator', 'Downloads')

12、os.path.join(path,*paths)

  • 拼接路径,返回 path 和 *paths 所有值的连接。
# input code
print(os.path.join(r'.\Downloads','abc.txt'))
# output result
.\Downloads\abc.txt

13、os.path.isdir(path)

  • 判断是否为目录(文件夹),若是则返回True,反之返回False。
# input code
print(os.path.isdir(r'.\pycharm-community-2020.2.4.exe'))  # 以上文所说的文件为例
# output result
False

14、os.path.isfile(path)

  • 判断是否为文件,若是则返回True,反之返回False。
# input code
print(os.path.isfile(r'.\pycharm-community-2020.2.4.exe'))
# output result
True

15、os.path.basename(path)

  • 返回路径 path 的基本名称。类似 split('\')split('/') 两个函数的功能,这里返回的是右数第一个斜杆或反斜杠后的内容,若斜杆或反斜杠为 path 的最后一个字符,则返回空值。
# input code
print(os.path.basename(r''C/user/new_file'))
# output result
new_file

16、os.envion[ ]

  • 对环境变量进行修改、删除、获取等操作。
# input code
print(os.environ)
# output result
environ({'CUDA_VISIBLE_DEVICES': '0'})  # 可自行打印查看自己的设备环境,这里仅展示其中的一个字段
# for example
os.environ['CUDA_VISIBLE_DEVICES'] = '0' # 设置当前使用的GPU设备仅为0号设备
# 常用于使用PyTorch在指定GPU上训练模型
  • 常见环境字段:
# Windows
os.environ['HOMEPATH']:当前用户主目录
os.environ['TEMP']:临时目录路径
os.environ["PATHEXT"]:可执行文件
os.environ['SYSTEMROOT']:系统主目录
os.environ['LOGONSERVER']:机器名
os.environ['PROMPT']:设置提示符
# Linux
os.environ['USER']:当前使用用户
os.environ['LC_COLLATE']:路径扩展的结果排序时的字母顺序
os.environ['SHELL']:使用shell的类型
os.environ['LAN']:使用的语言
os.environ['SSH_AUTH_SOCK']:ssh的执行路径

17、os.remove(path)

  • 移除(删除)文件 path 。如果 path 是目录,则抛出 IsADirectoryError 异常(使用 rmdir() 删除目录)。
  • 在 Windows 上,尝试删除正在使用的文件会抛出异常。而在 Unix 上,虽然该文件的条目会被删除,但分配给文件的存储空间仍然不可用,直到原始文件不再使用为止。
# input code
os.remove(r'./new_file')  # 删除目录
# output result
PermissionError: [WinError 5] 拒绝访问。: './new_file' # 抛出异常
# input code 2
os.remove(r'./new_file/TEXT.txt')  # 删除文件
print(os.listdir(r'./new_file'))  # 查看是否已删除文件
# output result 2
[] # 已删除

18、os.walk(top, topdown=True, οnerrοr=None, followlinks=False)

  • 生成目录树中的文件名,方式是按上 —> 下或下 —> 上顺序浏览目录树。
  • 对于以 top 为根的目录树中的每个目录(包括 top 本身),它都会生成一个三元组 ( dirpath, dirnames, filenames )。
  • 其中 dirpath 为所处目录的路径,dirnames 为所处目录的子目录(若不存在则返回空列表),filenames 为当前目录下的文件。

假设 C 盘存在一个文件夹 “ file ”,file 中含有一个文件夹 " sub_file " ( sub_file 内含有一个 text.txt 文件)和 " text.txt "文件。

# input code 1
for element in os.walk(r'C:\file'):
    print(element) 
# output result 1
('C:\\file', ['sub_file'], ['excel.xlsx', 'text.txt'])
('C:\\file\\sub_file', [], ['sub_text.txt'])

若想要遍历所有的文件,可采用下面这段代码:

# input code 2
for dirname, _, filenames in os.walk(r'C:\file'):
    for filename in filenames:
        print(os.path.join(dirname, filename))
# output result 2
C:\file\excel.xlsx
C:\file\text.txt
C:\file\sub_file\sub_text.txt