半小时速通Python标准库os

目录

  • 前言
  • 一、系统&变量
    • 1.1 os.name
    • 1.2 os.getcwd()
    • 1.3 os.environ
    • 1.4 os.sep
  • 二、文件&目录
    • 2.1 os.listdir()
    • 2.2 os.chdir()
    • 2.3 os.mkdir()
    • 2.4 os.makedirs()
    • 2.5 os.rmdir()
    • 2.6 os.removedirs()
    • 2.7 os.remove()
    • 2.8 os.rename()
  • 三、路径(os.path)
    • 3.1 os.path.basename()
    • 3.2 os.path.dirname()
    • 3.3 os.path.getsize()
    • 3.4 os.path.getctime()
    • 3.5 os.path.getatime()
    • 3.5 os.path.abspath()
    • 3.6 os.path.join()
    • 3.7 os.path.exists()
    • 3.8 os.path.isfile()
    • 3.9 os.path.isdir()

前言

os模块提供了不少与操作系统相关联的接口,使用时建议 import os 而非 from os import *

一、系统&变量

1.1 os.name

用于查看操作系统的类型,Windows系统返回 nt,Linux系统返回 posix

os.name
# 'nt'

1.2 os.getcwd()

类似于Linux中的 pwd,即查看当前工作目录。

os.getcwd()
# 'G:\\jupyterwork'

1.3 os.environ

查看系统的环境变量,会以类字典形式返回。

os.environ
# environ{'ALLUSERSPROFILE': 'C:\\ProgramData',
#         ...
#         'MPLBACKEND': 'module://matplotlib_inline.backend_inline'}

如果要查看所有的路径变量,只需执行

os.environ['PATH'].split(';')
# ['G:\\miniconda3\\envs\\dl',
#  ...
#  'C:\\Program Files\\Kite']

它会返回所有路径变量组成的列表。

1.4 os.sep

查看用于系统路径的分隔符。

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

当然,我们还可以将所有的反斜杠 \ 替换为正斜杠 /

二、文件&目录

2.1 os.listdir()

类似于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']

2.2 os.chdir()

类似于Linux中的 cd 命令,用于切换当前工作目录。

os.getcwd()
# 'G:\\jupyterwork'
os.chdir(r'D:\Program Files')
os.getcwd()
# 'D:\\Program Files'

2.3 os.mkdir()

用于创建一个目录(文件夹),文件夹名需要在路径中给出。

例如,我们想在当前目录下创建一个名为 A 的文件夹:

os.mkdir(r'.\A')

如果我们想在当前目录下的 B 文件夹里创建一个 C 文件夹,而此时 B 文件夹还不存在,如果直接执行

os.mkdir(r'.\B\C')

会报错,那有没有办法来解决呢?

好在 os.makedirs() 提供了这样递归创建目录的功能。

2.4 os.makedirs()

如前所述,我们只需执行

os.makedirs(r'.\B\C')

即可递归地创建目录。

2.5 os.rmdir()

用于删除空目录,若目录是非空的则无法删除。

os.makedirs(r'.\B\C')
os.rmdir(r'.\B')
# OSError: [WinError 145] 目录不是空的。: '.\\B'

# 正确做法如下:
os.rmdir(r'.\B\C')
os.rmdir(r'.\B')

如果一个目录中有许多其他目录,这样一个个手动删除略显麻烦,有没有更快的方法呢?

当然有!请看下面。

2.6 os.removedirs()

为了达到指定的场景,首先创建目录:

os.makedirs(r'.\B\C\D\E\F')

如果只用 rmdir,我们需要执行5次命令才能够把文件夹 B 删除,但现在只需要一行 removedirs 即可:

os.removedirs(r'.\B\C\D\E\F')

2.7 os.remove()

该命令针对的是文件而非文件夹,用于移除某个文件。

例如删除当前目录下的 1.txt 文件

os.remove(r'.\1.txt')

2.8 os.rename()

对目录或文件进行重命名:

os.mkdir(r'.\B')
os.rename(r'.\B', r'.\C')

上述语句的含义是,首先在当前目录下创建一个空目录 B, 随后将该目录的名称修改为 C

三、路径(os.path)

为方便后续举例,假设目录 G:\jupyterwork 下有一个 a.txt,即路径为

path = r'G:\jupyterwork\a.txt'

因为 G:\jupyterwork 同时也是我们的工作目录,所以上述路径还可以写为 r'.\a.txt'


3.1 os.path.basename()

返回所给路径最深处的目录名或文件名。

path = r'G:\jupyterwork'
os.path.basename(path)
# 'jupyterwork'

path = r'G:\jupyterwork\a.txt'
os.path.basename(path)
# 'a.txt'

3.2 os.path.dirname()

返回 os.path.basename() 所在的目录。

path = r'G:\jupyterwork'
os.path.dirname(path)
# 'G:\\'

path = r'G:\jupyterwork\a.txt'
os.path.dirname(path)
# 'G:\\jupyterwork'

3.3 os.path.getsize()

获取文件的大小(单位是Byte)。

path = r'G:\jupyterwork\a.txt'
os.path.getsize(path)
# 48

3.4 os.path.getctime()

获取创建文件时的时间戳。

path = r'.\a.txt'
os.path.getctime(path)
# 1651649997.521422

3.5 os.path.getatime()

获取最后一次修改文件时的时间戳。

path = r'.\a.txt'
os.path.getatime(path)
# 1651650441.1073601

3.5 os.path.abspath()

获取绝对路径。

path = r'.\a.txt'
os.path.abspath(path)
# 'G:\\jupyterwork\\a.txt'

3.6 os.path.join()

将目录与文件名/目录连接起来。

mypath = os.path.join('.', 'a.txt')
os.path.abspath(mypath)
# 'G:\\jupyterwork\\a.txt'

3.7 os.path.exists()

判断所给文件或目录是否存在,如果存在则返回 True,否则返回 False。

os.path.exists(r'.\a.txt')
# True

os.path.exists(r'.\b.txt')
# False

3.8 os.path.isfile()

判断是否是文件,如果存在则返回 True,否则返回 False。

与 3.7 类似,这里不再举例,读者可自行尝试。

3.9 os.path.isdir()

判断是否是目录,如果存在则返回 True,否则返回 False。

与 3.7 类似,这里不再举例,读者可自行尝试。

你可能感兴趣的:(Python,python,开发语言)