pyhon—os模块

os模块的作用

os模块是python标准库中的一个用于访问操作系统功能的模块, os模块提供了其他操作系统接口,可以实现跨平台访问。

1 系统操作

os.sep 返回系统路径的分隔符
linux类系统的路径分隔符是“/”,windows系统的分隔符是“\”

[kiosk@foundation47 os]$ cat os_01.py 
# _*_coding:utf-8_*_
import os
print(os.sep)   # 返回系统路径的分隔符

[kiosk@foundation47 os]$ python3 os_01.py 
/    # 运行返回结果

os.name 返回当前平台操作系统
当返回的值为posix时,则为linux系统;返回值为nt时,则为windows系统

[kiosk@foundation47 os]$ cat os_01.py 
# _*_coding:utf-8_*_
import os
print(os.name)   # 输出当前操作系统类型
if os.name =='posix':
    print('linux')   # 判断是使用是否为里努西系统
else:
    print('其他')

[kiosk@foundation47 os]$ python3 os_01.py 
posix     
linux    # 输出结果

os.uname() 返回操作系统的详细信息,也可以得到具体分项的信息

[kiosk@foundation47 os]$ cat os_01.py 
# _*_coding:utf-8_*_
import os   #导入模块
uname = os.uname()  #使用变量接收
print(uname) # 输出系统所有详细信息
print(uname.sysname)  # 输出系统操作系统类型
print(uname.nodename)  # 输出主机名称
print(uname.release)  # 输出内核版本
print(uname.version)  # 输出系统版本
print(uname.machine)  #输出硬件架构

[kiosk@foundation47 os]$ python3 os_01.py   # 各个部分的输出结果
posix.uname_result(sysname='Linux', nodename='foundation47.ilt.example.com', release='3.10.0-514.el7.x86_64', version='#1 SMP Wed Oct 19 11:24:13 EDT 2016', machine='x86_64')   
Linux
foundation47.ilt.example.com
3.10.0-514.el7.x86_64
#1 SMP Wed Oct 19 11:24:13 EDT 2016
x86_64

os.environ 系统的环境变量,输出为一个字典形式,可以通过key得到具体信息
os.getenv(‘PATH’) 获得指定的环境变量的内容
os.environ.get(‘PATH’) 获得指定的环境变量的内容

脚本内容:
import os
result = os.environ
print(result)
print(result['PATH'])
print(result.get('PATH'))
print(os.getenv('PATH'))

输出信息:
environ({'PATH': '/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin', 'XAUTHORITY': '/run/gdm/auth-for-kiosk-gQ5sOk/database'.... 
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin
2、对文件以及目录的操作

1 文件操作:创建文件以及删除文件
os.mknod(文件名称) # 当该文件存在的时候出现报错
os.remove(文件名称 ) # 当该文将不存在的时候出现报错

[kiosk@foundation47 os]$ cat os_01.py 
# _*_coding:utf-8_*_
import os
os.mknod('/public/toto')    # 创建文件

[kiosk@foundation47 os]$ python3 os_01.py   # 创建成功
[kiosk@foundation47 os]$ ls /public/
toto
[kiosk@foundation47 os]$ python3 os_01.py   # 当文件已经存在的时候,再次创建
Traceback (most recent call last):
  File "os_01.py", line 4, in 
    os.mknod('/public/toto')
FileExistsError: [Errno 17] File exists   # 出现报错,提示文件已经存在
[kiosk@foundation47 os]$ cat os_01.py 
# _*_coding:utf-8_*_
import os
os.remove('/public/toto')   # 删除文件

[kiosk@foundation47 os]$ python3 os_01.py   # 成功删除文件
[kiosk@foundation47 os]$ ls /public/
[kiosk@foundation47 os]$ python3 os_01.py   # 当文件不存在的时候删除文件
Traceback (most recent call last):
  File "os_01.py", line 4, in 
    os.remove('/public/toto')
FileNotFoundError: [Errno 2] No such file or directory: '/public/toto'  # 出现报错,提示文件不存在

2 目录进行操作

os.listdir(目录名称) # 列出目录中的所有文件以及目录,返回一个列表
os.mkdir(目录名称) # 创建一个目录,不能递归创建,目录存在时再创建报错。
os.makedirs(‘目录名称’) # 递归创建目录,目录存在时再创建报错
os.rmdir(目录名称) # 删除一个空目录,不能递归删除,目录不存在时以及存在文件时候报错。
os.removedirs(‘目录名称’) # 递归删除空目录,目录不存在或者目录中存在文件时报错

import os
print(os.listdir('/public'))
os.mkdir('/public/dir1')
print(os.listdir('/public'))
os.makedirs('/public/dir2/tops2/toto2')
print(os.listdir('/public'))
os.rmdir('/public/dir1')
print(os.listdir('/public'))
os.removedirs('/public/dir2/tops2/toto2')
print(os.listdir('/public'))
['file1', 'file2', 'file3', 'file4', 'file5']
['file1', 'file2', 'file3', 'file4', 'file5', 'dir1']
['file1', 'file2', 'file3', 'file4', 'file5', 'dir1', 'dir2']
['file1', 'file2', 'file3', 'file4', 'file5', 'dir2']
['file1', 'file2', 'file3', 'file4', 'file5']

3 对文件以及目录进行重命名
os.rename(‘oldname’,‘newname’) # 当新名字已经被使用的时候,重命名失败

import os
print(os.listdir('/public'))
os.rename('/public/toto','/public/lala')
os.rename('/public/dir','/public/top')
print(os.listdir('/public'))

输出结果:

['toto', 'dir']  # 原来的文件以及目录名称
['lala', 'top']  # 重命名之后的文件和目录的名称
3 、path模块

1 判断
os.path.exists(文件/目录) # 判断文件/目录是否存在,返回为True 或者 False
os.path.isdir(目标) # 判断目标是否为目录,返回为True 或者 False
os.path.isfile(目标) # 判断目标是否为文件,返回为True 或者 False
os.path.isabs(目标路径) # 判断是否为绝对路径,返回为True 或者 False

import os   # 导入模块
print(os.listdir('/public'))   # 显示目录/public中的所有文件以及目录
print(os.path.exists('/public/toto'))
print(os.path.exists('/public/lala'))   # 判断是否存在
print(os.path.isfile('/public/lala'))
print(os.path.isfile('/public/top'))  # 判断时都为文件
print(os.path.isdir('/public/top'))
print(os.path.isdir('/public/lala'))    # 判断是否为目录

输出结果:返回为True 或者 False

['lala', 'top']
False
True
True
False
True
False

2 path模块对文件/目录路径以及名称进行处理
os.path.abspath(文件/目录) # 以绝对路径显示文件或者目录,此处的文件或者目录是绝对路径的时候,不做改变,输出原右的内容,当不是绝对路径的时候,将当前所在的位置的绝对路径添加到输入的文件或者目录相对路径前面,形成绝对路径

import os
print(os.path.abspath('toto/lele'))
print(os.path.abspath('/lala/tops'))

#输出结果;
/home/kiosk/PycharmProjects/python/os/toto/lele
/lala/tops

os.path.join(路径1,路径2) # 将路径1 和路径2 连接起来,如果路径2 为绝对路径则输出路径2.

import os
print(os.path.join('toto/lele','lala/tops'))
print(os.path.join('toto/lele','/lala/tops'))

#输出结果;
toto/lele/lala/tops  # 将两个路径连接
/lala/tops  # 只是返回第二个绝对路径

os.path.basename(文件/目录的路径) # 返回文件或者目录名称
os.path.dirname(文件/目录的路径) # 返回指定文件或者目录的上层路径

import os
print(os.path.basename('toto/lele/lala/tops'))
print(os.path.dirname('toto/lele/lala/tops'))

#输出结果:
tops
toto/lele/lala

os.path.splitext(文件) # 将文件后缀进行分离,返回一个元组,元组的第一个元素为除过文件名称后缀剩余部分,第二个元素为文件后缀;当文件没有后缀的时候,第二个元素为空。

import os
print(os.path.splitext('toto/lele.html'))
print(os.path.splitext('toto/lele'))

#输出结果:
('toto/lele', '.html')
('toto/lele', '')

os.path.split('文件/目录') #将给出的文件或者目录进行分离,返回一个元组,第一个元素为除过目标文件或者目录之外剩余的路径,第二个元素为文件或者目录名称;当只有文件或者目录名称时候,第一个元素为空。

import os
print(os.path.split('/haha/lele/yeye/toto'))
print(os.path.split('toto'))

#输出结果:
('/haha/lele/yeye', 'toto')
('', 'toto')

应用练习:

1. 在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)

import os
import random
import string

def str_name():
    """生成文件名称"""
    name_li = random.sample(string.ascii_letters+string.digits,4)
    return ''.join(name_li)+'.png'
def create_file():
    os.mkdir('img')
    name = {str_name() for i in range(100)}
    for k in name:
        filename = os.path.join('img',k)
        os.mknod(filename)

create_file()

2. 将当前img目录所有以.png结尾的后缀名改为.jpg

import os
def change(dirname,old_suffix,new_suffix):
    filename_li = [name for name in os.listdir(dirname) if name.endswith(old_suffix)]
    for filename in filename_li:
        oldname = os.path.join(dirname,filename)
        newname = os.path.join(dirname,os.path.splitext(filename)[0]+new_suffix)
        os.rename(oldname,newname)
change('img','.png','jpg')

你可能感兴趣的:(pyhon—os模块)