Python之os模块介绍

Python os 模块

os是“operating system”的缩写,os模块提供各种 Python 程序与操作系统进行交互的接口,使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性

注意 一定要使用 import os 而不是 from os import * 。这将避免内建的 open() 函数被 os.open() 隐式替换掉,因为它们的使用方式大不相同。

os模块的常用操作

1

import os

os.getcwd() 获取当前工作路径

1

os.getcwd()

os.chdir() 切换工作路径

1

2

3

# 将工作目录切换到'D:/Pycharm'

os.chdir('D:/Pycharm'

print(os.getcwd()) #D:\Pycharm

os.environ 获取所有的环境变量,

1

os.environ

os.getlogin()返回通过控制终端进程进行登录的用户名

1

os.getlogin()

os.name 返回python运行的环境系统

1

2

3

4

5

6

7

8

os.name

'''

返回值的意思

posix  Linux 和 Mac OS

nt  Windows

java  Java 虚拟机环境

'''

  • os.mkdir 创建一个新的文件价夹,不能创建多级的文件夹

当文件夹已经存在时会报错FileExistsError

创建多级的文件夹会报错FileNotFoundError

1

2

3

4

5

# 在当前目录下创建一个名为test的文件夹

os.mkdir('test')

# 报错内容

# FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'test'

  • os.makedirs() 创建多级目录

1

2

# 创建a文件夹,并且在a文件夹下创建b文件夹

os.makedirs('a/b')

  • os.rmdir() 删除空文件夹

如果如果删除的文件夹非空OSError: [WinError 145] 目录不是空的。'filename'

1

2

# 删除文件夹a

os.rmdir('a')

  • os.removedirs() 递归删除目录。

工作方式类似于 rmdir(),不同之处在于,如果成功删除了末尾一级目录,removedirs() 会尝试依次删除 path 中提到的每个父目录,直到抛出错误为止(但该错误会被忽略,因为这通常表示父目录不是空目录)

1

2

# 删除文件夹 文件夹 a及子文件夹b

os.removedirs('a/b')

  • os.remove() 删除文件

1

2

# 删除文件a.txt

os.remove('a.txt')

  • os.rename(src, dst) 将文件或路径(文件夹)重命名,以及移动文件夹

src 原路径,dst修改后的命名

只能重命名原路径 src 最后的路径或文件的名字,中间路径都必须要存在,否则就会抛出FileNotFoundError

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 将文件名b修改成文件名c

os.rename('a/b','a/c')

# 文件目录:  a/c c文件夹是a文件夹的子文件夹

# 将文件c移动到和a同级目录下

os.rename('a/c','c')

# 文件目录:  a/c c文件夹是a文件夹的子文件夹

# 将文件c移动到和a同级目录下并改名为'newname'

os.rename('a/c','newname')

# 文件目录: a/c/w.txt

# 将文件w.txt修改成ww.txr

os.rename('a/c/w.txt','a/c/ww.txt')

# 同样也可以移动文件并重名的方式一样,用法和移动文件并重名的方式一样

os.renames(old, new)递归重命名目录或文件。工作方式类似 rename(),除了会首先创建新路径所需的中间目录。重命名后,将调用 removedirs() 删除旧路径中不需要的目录。

1

2

# 重命名可以重命名中间路径(实际上是,先新建新的目录,然后判断原目录是否可以删除,如果可以删除,就删除)

os.renames('a/b/a.txt','a/c/aaa.txt')

os.path模块

os.path中的函数基本上是纯粹的字符串操作。换句话说,传入该模块函数的参数甚至不需要是一个有效路径,该模块也不会试图访问这个路径,而仅仅是按照“路径”的通用格式对字符串进行处理

os.path 获取当前环境的路径

1

os.path

os.path.abspath(path) 返回路径 path 的绝对路径

1

2

# 根据相对路径返回绝对路径

print(os.path.abspath('a/c/aaa.txt'))

os.path.exists(path) 判断该路径或文件是否存在

path:路径

返回布尔值,True,False

1

2

3

4

# 检查文件是否存在

print(os.path.exists('a/c'))

# 检查aaa.txt文件是否存在

print(os.path.exists('a/c/aaa.txt'))

os.path.getatime(path)返回path的最后访问时间,返回的时间为秒(时间戳),可以利用tiem转换成常用的时间格式

1

2

3

4

5

6

7

# 返回文件a最后的访问时间

print(os.path.getatime('a'))

t = os.path.getatime('a')  # 获取时间戳

tupTime = time.localtime(t)  # 将时间戳转换成本地时间

stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime)  # 转换成对应的时间格式

print(stadardTime) # 2022-09-18 11:44:28

os.path.getctime(path) 在windos下获取文件的创建时间,在Unix返回的是最后的修改时间

1

2

# 获取aaa.txt文件的创建时间(windows)

t = os.path.getctime('a/c/aaa.txt')

os.path.getsize(path) 获取文件的大小

1

2

# 获取文件aaa.txt的大小

os.path.getsize('a/c/aaa.txt')

os.path.split() 将路径 path 拆分为一对,即 (head, tail),其中,tail 是路径的最后一部分,而 head 里是除最后部分外的所有内容。tail 部分不会包含斜杠,如果 path 以斜杠结尾,则 tail 将为空。如果 path 中没有斜杠,head 将为空。如果 path 为空,则 head 和 tail 均为空。

返回的部分是一个元组里面由两个元素

1

2

3

4

5

6

7

8

9

10

11

12

13

14

a = os.path.split('D:/aa/bb')

print(type(a))  # <class 'tuple'>

print(a)       #  ('D:/aa', 'bb')  头部和尾部

# 当最后为'/‘时

a = os.path.split('D:/aa/bb/')

print(a)     # ('D:/aa/bb', '')  尾部为空

# 当路径path中没有路径的时候

a = os.path.split('aa')

print(a)  # ('', 'aa')  # 头部为空

  

# 当传入的路径为空时

a = os.path.split( '')

print(a)  # ('', '')  # 头部和尾部均为空

os.path.isfile() 判断传入的文件是否存在 返回布尔值

1

2

# 判断文件是否存在

os.path.isfile('a/c/aaa.txt')

os.path.isdir() # 判断文件路径是否存在 返回布尔值

1

2

# 判断路径a/c是否存在

os.path.isdir('a/c')

os.open()模块

os.open() 打开文件的一系列操作

用法和基本的open函数很类似

注解 本函数适用于底层的 I/O。常规用途请使用内置函数 open(),该函数的 read() 和 write() 方法(及其他方法)会返回 文件对象。要将文件描述符包装在文件对象中,请使用 fdopen()。

1

2

3

4

5

6

os.open(file, flags[, mode])

'''

file 文件名

flags  模式

mode 可选参数, mode 设置其权限状态

'''

flags – 该参数可以是以下选项,多个使用 “|” 隔开:

  • os.O_RDONLY: 以只读的方式打开
  • os.O_WRONLY: 以只写的方式打开
  • os.O_RDWR : 以读写的方式打开
  • os.O_NONBLOCK: 打开时不阻塞
  • os.O_APPEND: 以追加的方式打开
  • os.O_CREAT: 创建并打开一个新文件
  • os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
  • os.O_EXCL: 如果指定的文件存在,返回错误
  • os.O_SHLOCK: 自动获取共享锁
  • os.O_EXLOCK: 自动获取独立锁
  • os.O_DIRECT: 消除或减少缓存效果
  • os.O_FSYNC : 同步写入
  • os.O_NOFOLLOW: 不追踪软链接

在写入文件时不能直接写入字符串否则会报错TypeError: a bytes-like object is required, not 'str'

1

2

3

4

5

6

7

8

9

# 打开文件

fd = os.open("foo.txt", os.O_RDWR|os.O_CREAT )  # 模式可以并存中间用 | 隔开

# 写入字符串

a = b"This is test"  

os.write(fd,a)

# 关闭文件

os.close(fd)

print("关闭文件成功!!")

最后

最后如果忘记了os的用法可以使用内置的 dir() 和 help() 函数来查看函数的用法

dir() 返回一个列表包括 os模块的所有函数名

1

print(dir(os))

help() 返回所有os模块的所有内容

1

print(help(os))

这样的结果看着确实有点不太人性化

转自:https://www.weidianyuedu.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值