python-os模块学习,全

发布时间:2024年01月12日

目前,计算机上主流的操作系统有Windows、Unix、Mac OS等,os模块为多操作系统的访问提供了相关功能的支持,涉及对文件相关操作功能的实现,系统访问path路径的操作,shell命令行操作,Linux扩展属性的操作,流程管理,CPU等硬件相关信息的获取,基于操作系统的真正的随机数的操作及相关的一些系统常量进行介绍。

1. os库基本介绍

Os库提供通用的、基本的操作系统交互功能

  • Os库是python标准库,包含几百个函数
  • 常用路径操作、进程管理、环境参数等几类
  • 路径操作:os.path子库,处理文件路径及信息
  • 进程管理:启动系统中其他程序
  • 环境参数:获得系统软件硬件信息等环境参数

2. 导库

在python中,使用到一个库的时候,需要使用到 import 将这个库导入到当前的工作空间中,其中,导入的方式有下面几种

# 1.使用 import 导入
import 库名
import 库名1,库名2,...  # 导入多个库

# 2.使用 from
from 库名 import 函数名 # 导入指定的方法
from 库名 import *     # 导入该库中所有的方法

# 3.使用 as
import 库名 as 别名  # 防止库名太长,不好记
from 库名 import 函数名 as 别名 # 导入库中的某个方法,为其设置别名

os系统

os.system()

os.system("mv a.txt b.txt")

# 可以将 "mv a.txt b.txt" 作为当前操作系统的命令进行使用

os.name

import os
print(os.name)  # 打印当前系统类型
print(type(os.name))  # 打印返回值类型

3.文件和目录的常用操作

函数功能描述
os.getced()获取当前的路径
os.chdir(x)将当前的工作目录更改为x
os.rename(x,y)将指定路径的文件或目录 x 重命名为 y
os.remove(x)删除指定路径文件 x (如果指定到一个目录,则会报错)
os.mkdir(x)创建指定路径的新目录 x (如果存在,则报错)
os.rmdir(x)删除指定路径x的空目录(如果目录不为空,则报错)
os.makedirs(x)递归地创建路径x中的多级目录(如果目录已存在,则不回发生任何操作)
os.removedirs(x)递归地删除路径 x 中所有为空的目录

当前目录以及下面的文件

# tree /root/python
python
└── os
    ├── a.txt
    └── main.py

os.getced()

# 当前路径 /root/python/os

import os
a = os.getcwd()
print(a)

# 输出: /root/python/os

os.chdir(x)

# 当前路径 /root/python/os

import os
a = os.getcwd()
print(a)
os.chdir("/opt/")
a = os.getcwd()
print(a)

# 输出: 
# /root/python/os
# /opt

os.rename(x,y)

import os

a = "/root/python/os/a.txt"
b = "/root/python/os/b.txt"
os.rename(a,b)
# tree /root/python
python
└── os
    ├── b.txt
    └── main.py

os.remove(x)

import os
os.remove('/root/python/os/b.txt')

当前目录以及下面的文件

# tree /root/python
python
└── os
    └── main.py

os.mkdir(x)

import os
os.mkdir("/root/python/os/mk")
# tree /root/python
python
└── os
    ├── main.py
    └── mk

os.rmdir(x)

import os
os.rmdir("/root/python/os/mk")
os.rmdir("/root/python/os")

# 执行结果
# Traceback (most recent call last):
#   File "/root/python/os/main.py", line 26, in <module>
#     rmdir()
#   File "/root/python/os/main.py", line 25, in rmdir
#     os.rmdir("/root/python/os")
# OSError: [Errno 39] Directory not empty: '/root/python/os'
# tree /root/python
python
└── os
    └── main.py

os.makedirs(x)

import os
os.makedirs("/root/python/os/mk/dump")
# tree /root/python
python
└── os
    ├── main.py
    └── mk
        └── dump

os.removedirs(x)

import os
os.removedirs("/root/python/os/mk/dump")
# tree /root/python
python
└── os
    └── main.py

4. 路径的常用操作

os.path模块是Python中处理路径信息的常用模块之一,作为os模块的子模块,通常两者一起使用,来操作文件和目录。

路径中要区分绝对路径和相对路径

操作文件路径的函数

函数功能描述
os.path.basename(path)返回路径中的最后一项,通常是文件名
os.path.dirname(path)返回路径得到目录部分
os.path.split(path)分割路径,将目录和文件名拆开,返回一个二元的元组
os.path.join(path1,path2…)将多个路径组合为一个完整的路径,返回一个字符串
os.path.abspath(path)返回指定路径的绝对路径
os.path.basename(path)
import os
name = os.path.basename("/root/python/os/a.txt")
print(name)

# 输出:a.txt  对于是否存在都可以获取到

之后对 /root/python/os/ /root/python/os 这两种情况进行了测试

/root/python/os/ 运行结果为 空

/root/python/os 运行结果为 os

os.path.dirname(path)
import os
name = os.path.diename("/root/python/os/a.txt")
print(name)

# 输出:/root/python/os/  对于是否存在都可以获取到

之后对 /root/python/os/ /root/python/os 这两种情况进行了测试

/root/python/os/ 结果为 /root/python/os/

/root/python/os 结果为 /root/python/

os.path.split(path)
import name
name = os.path.split("/roo/python/os/a.txt")
print(name)

# 输出结果 ('/roo/python/os', 'a.txt')
os.path.join(path1,path2…)
import os
name = os.path.join("/1/","2/","3/")
print(name)

# 输出结果 /1/2/3/
os.path.abspath(path)
import os
name = os.path.abspath("../../.ssh")
print(name)

# 输出结果  /root/.ssh

获取文件和目录属性的函数

函数功能描述
os.path.isdir(path)判断该路径是否为目录,返回 true 或 false
os.path.isfile(path)判断该路径是否为文件,返回 true 或 false
os.path.isabs(path)判断该字符串是否为绝对路径,返回 true 或 false
os.path.exists(path)判断该路径(或文件)是否存在,返回 true或false
os.path.getsize(path)判断指定文件的大小,单位为字节
os.path.getctime(path)获取指定文件或目录的创建时间
os.path.getmtime(path)获取指定文件或目录的修改时间
os.path.isdir(path)
import
dir1 = os.path.isdir("/root/")
print(dir1)
dir2 = os.path.isdir("/root/python/os/a.txt")
print(dir2)

# 执行结果
# True
# False
os.path.isfile(path)
import
file1 = os.path.isfile("/root/")
print(file1)
dir2 = os.path.isfile("/root/python/os/a.txt")
print(file2)

# 执行结果
# False
# True
os.path.isabs(path)
abs1 = os.path.isabs("/root/python")
print(abs1)
abs2 = os.path.isabs("./python")
print(abs2)

# 执行结果
# True
# False
os.path.exists(path)
import os
ex1 = os.path.exists("/root/python")
print(ex1)
ex2 = os.path.exists("/root/os")
print(ex2)

# 执行结果 
# True
# False
os.path.getsize(path)
import os
size = os.path.getsize("/root/")

# 执行结果 
# 4096

截屏2024-01-12 15.29.06

os.path.getctime(path)
import os
time = round(os.path.getctime("/root/python/os"))   # round是用来四舍五入的
print(time)

# 执行结果
# 1705043532  这是一个时间戳  

image-20240112154805929

os.path.getmtime(path)
import os
time = round(os.path.getctime("/root/python/os/a.txt"))
print(time)

time1 = round(os.path.getmtime("/root/python/os/a.txt"))
print(time1)

image-20240112161948310

这个修改时间和创造时间一直都是一致的,无法进行测试

文件扩展名函数

在处理数据的时会遇见一种场景,需要对目录中特定的文件进行处理,那怎么获取到一个文件的类型呢? os.path.splitext()函数带你走近这个秘密

os.path.splitext(path)会将路径分为文件名和扩展名,返回一个二元组,位置一是文件名,位置二是扩展名,如果该文件没有扩展名,则第二个元素为空字符串。

os.path.splitext(path)
import os
name1 = os.path.splitext("/root/python/os/a.txt")
print(name1)
name2 = os.path.splitext("/root/python/os/a")
print(name2)

# 输出结果
# ('/root/python/os/a', '.txt')
# ('/root/python/os/a', '')

文件和目录的遍历方法

os.listdir()

os.listdir(path)函数得到一个包含指定目录下所有文件和子目录名称的列表

import os
name = os.listdir("/")
print(name)

# 输出结果: ['wget-log.3', 'dev', 'run', 'wget-log.2', 'var', 'boot', 'media', 'wget-log.1', 'srv', 'ssh', 'usr', 'lib', 'opt', 'lost+found', 'sys', 'root', 'wget-log', 'sbin', 'ssd', '1.txt', 'aaa', 'proc', 'tmp', 'bin', 'mnt', 'snap', 'etc', 'home']

os.walk()

os.walk(path, topdown=True, onerror=None, followlinks=False)函数是一个递归式的遍历,用于遍历指定目录及其目录中的所有文件和目录!

  • path 为要遍历的目录路径。返回的是一个三元组(dirpath,dirnames,filenames),dirpath 为当前遍历的目录树的目录路径,dirnames 为当前目录下所有子目录列表,filenames为当前目录下所有文件列表
  • topdown 为可选参数,为 True 时(默认)表示优先遍历 path目录,即 walk 会遍历 top 文件夹与其每一个子目录。否则会优先遍历 top 的子目录。
  • onerror 为可选的错误处理函数。
  • followlinks为可选参数,为 True 时表示会遍历目录下的快捷方式实际所指的目录,为 False 时(默认)表示优先遍历 top 的子目录。

当我们使用os.walk()函数时,它会从根目录开始遍历整个目录树,并且对于每个目录,都会返回一个三元组

image-20240112165420745

import os
# 递归遍历该目录
walk_tree = os.walk('/root/python')

# 从根目录开始遍历整个目录树,每一个目录都会返回一个三元组,使用for循环依次查看结果
for dirpath,dirnames,filenames in walk_tree:
    print('----------当前遍历的目录树的目录路径----------')
    print(dirpath)

    print('----------当前目录下的所有子目录列表----------')
    # 遍历当前目录下所有的子目录
    for dirname in dirnames:
        # 拼接路径,得到子目录的路径
        dir_name = os.path.join(dirpath, dirname)
        print(dir_name)
    
    print('----------当前目录下所有文件列表----------')
    # 遍历当前目录下所有的文件
    for filename in filenames:
        # 拼接路径,得到文件路径
        file_name = os.path.join(dirpath,filename)
        print(file_name)

image-20240112165515930

文章来源:https://blog.csdn.net/XiaoLinZuoTi/article/details/135557475
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。