os模块提供了不少与操作系统相关联的接口,使用时建议 import os
而非 from os import *
。
用于查看操作系统的类型,Windows系统返回 nt
,Linux系统返回 posix
。
os.name
# 'nt'
类似于Linux中的 pwd
,即查看当前工作目录。
os.getcwd()
# 'G:\\jupyterwork'
查看系统的环境变量,会以类字典形式返回。
os.environ
# environ{'ALLUSERSPROFILE': 'C:\\ProgramData',
# ...
# 'MPLBACKEND': 'module://matplotlib_inline.backend_inline'}
如果要查看所有的路径变量,只需执行
os.environ['PATH'].split(';')
# ['G:\\miniconda3\\envs\\dl',
# ...
# 'C:\\Program Files\\Kite']
它会返回所有路径变量组成的列表。
查看用于系统路径的分隔符。
os.sep
# '\\'
注意 \
是转义字符,因此如果 print(os.sep)
只会得到一个 \
。
在Windows系统中,对于给定的某个路径 C:\Users\Administrator\Desktop\1.csv
,我们不能将其直接转换为字符串使用,因为会出现转义现象:
path = 'C:\Users\Administrator\Desktop\1.csv'
print(path)
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
有以下两种解决办法,第一种是将所有的 \
替换为 \\
,即
path = 'C:\\Users\\Administrator\\Desktop\\1.csv'
print(path)
# C:\Users\Administrator\Desktop\1.csv
第二种是在字符串前面加个 r
,作用是防止转义
path = r'C:\Users\Administrator\Desktop\1.csv'
print(path)
# C:\Users\Administrator\Desktop\1.csv
当然,我们还可以将所有的反斜杠 \
替换为正斜杠 /
。
类似于Linux中的 ls
命令,列出指定路径下所有的文件和目录。
路径名为 .
表示当前目录,为 ..
表示上一级目录。
os.listdir('.')
# ['.ipynb_checkpoints',
# '.virtual_documents',
# 'data',
# 'Untitled.ipynb',
# 'Untitled1.ipynb',
# '__pycache__']
os.listdir('..')
# ['$RECYCLE.BIN',
# 'ElegantBook',
# 'jupyterwork',
# 'Matlab Work',
# 'miniconda3',
# 'Program Files',
# 'ProgramData',
# 'Python',
# 'System Volume Information',
# 'Ubuntu20.04',
# 'Users']
os.listdir(r'D:\Program Files')
# ['Adobe Photoshop 2021',
# 'Bandicam',
# 'Java',
# 'Microsoft Visual Studio',
# 'nodejs',
# 'Oray',
# 'PDFelement',
# 'QQMessage',
# 'Typora',
# 'WinRAR',
# 'Wolfram Research',
# 'Youdaoyun']
类似于Linux中的 cd
命令,用于切换当前工作目录。
os.getcwd()
# 'G:\\jupyterwork'
os.chdir(r'D:\Program Files')
os.getcwd()
# 'D:\\Program Files'
用于创建一个目录(文件夹),文件夹名需要在路径中给出。
例如,我们想在当前目录下创建一个名为 A
的文件夹:
os.mkdir(r'.\A')
如果我们想在当前目录下的 B
文件夹里创建一个 C
文件夹,而此时 B
文件夹还不存在,如果直接执行
os.mkdir(r'.\B\C')
会报错,那有没有办法来解决呢?
好在 os.makedirs()
提供了这样递归创建目录的功能。
如前所述,我们只需执行
os.makedirs(r'.\B\C')
即可递归地创建目录。
用于删除空目录,若目录是非空的则无法删除。
os.makedirs(r'.\B\C')
os.rmdir(r'.\B')
# OSError: [WinError 145] 目录不是空的。: '.\\B'
# 正确做法如下:
os.rmdir(r'.\B\C')
os.rmdir(r'.\B')
如果一个目录中有许多其他目录,这样一个个手动删除略显麻烦,有没有更快的方法呢?
当然有!请看下面。
为了达到指定的场景,首先创建目录:
os.makedirs(r'.\B\C\D\E\F')
如果只用 rmdir
,我们需要执行5次命令才能够把文件夹 B
删除,但现在只需要一行 removedirs
即可:
os.removedirs(r'.\B\C\D\E\F')
该命令针对的是文件而非文件夹,用于移除某个文件。
例如删除当前目录下的 1.txt
文件
os.remove(r'.\1.txt')
对目录或文件进行重命名:
os.mkdir(r'.\B')
os.rename(r'.\B', r'.\C')
上述语句的含义是,首先在当前目录下创建一个空目录 B
, 随后将该目录的名称修改为 C
。
为方便后续举例,假设目录 G:\jupyterwork
下有一个 a.txt
,即路径为
path = r'G:\jupyterwork\a.txt'
因为 G:\jupyterwork
同时也是我们的工作目录,所以上述路径还可以写为 r'.\a.txt'
。
返回所给路径最深处的目录名或文件名。
path = r'G:\jupyterwork'
os.path.basename(path)
# 'jupyterwork'
path = r'G:\jupyterwork\a.txt'
os.path.basename(path)
# 'a.txt'
返回 os.path.basename()
所在的目录。
path = r'G:\jupyterwork'
os.path.dirname(path)
# 'G:\\'
path = r'G:\jupyterwork\a.txt'
os.path.dirname(path)
# 'G:\\jupyterwork'
获取文件的大小(单位是Byte)。
path = r'G:\jupyterwork\a.txt'
os.path.getsize(path)
# 48
获取创建文件时的时间戳。
path = r'.\a.txt'
os.path.getctime(path)
# 1651649997.521422
获取最后一次修改文件时的时间戳。
path = r'.\a.txt'
os.path.getatime(path)
# 1651650441.1073601
获取绝对路径。
path = r'.\a.txt'
os.path.abspath(path)
# 'G:\\jupyterwork\\a.txt'
将目录与文件名/目录连接起来。
mypath = os.path.join('.', 'a.txt')
os.path.abspath(mypath)
# 'G:\\jupyterwork\\a.txt'
判断所给文件或目录是否存在,如果存在则返回 True,否则返回 False。
os.path.exists(r'.\a.txt')
# True
os.path.exists(r'.\b.txt')
# False
判断是否是文件,如果存在则返回 True,否则返回 False。
与 3.7 类似,这里不再举例,读者可自行尝试。
判断是否是目录,如果存在则返回 True,否则返回 False。
与 3.7 类似,这里不再举例,读者可自行尝试。