【摘要】本博文介绍了Python内置的os模块,旨在掌握如何获取系统信息以及文件目录的操作。
1.os模块系统信息获取
在linux系统中,如果要操作文件或者目录,我们都是在命令行下面输入操作系统提供的各种命令来完成。而这些操作,在Python程序中一样可以执行。因为操作系统提供的命令只是简单地调用了操作系统提供的接口函数,Python内置的os模块也可以直接调用操作系统提供的接口函数。
1.1 获取操作系统类型
os.name方法其返回操作系统的类型,如果值为‘posix’,表示当前的操作系统为Linux、Unix或Mac OS X;如果值是‘nt’,则表示当前的操作系统为Windows系统。
通过这个逻辑,我们可以编写简单的代码,获取当前操作系统类型。
os_name = 'Linux' if os.name =='posix' else 'Windows'
print("当前操作系统: %s" %(os_name))
1.2 获取操作系统的详细信息
这里需要注意的是,windows下和linux下获取操作系统详细信息的模块有所不同。
在linux下,调用os模块中的uname()函数即可。
import os
detail_info = os.uname()
print(detail_info)
也可以单独查看
print("主机名:", detail_info.nodename)
print("硬件架构:", detail_info.machine)
print("系统名称:", detail_info.sysname)
print("Linux内核的版本号:", detail_info.release)
但是这个os.uname()函数在windows上不提供,也就是说,os提供的某些函数是跟操作系统相关的。
如果要在windows获取操作系统的详细信息,这里有另一个模块platform。
import platform
detail_info = platform.uname()
print(detail_info)
下面的代码可以查看详细信息中的单独信息:
print("主机名:", detail_info.node)
print("硬件架构:", detail_info.machine)
print("系统名称:", detail_info.system)
print("Linux内核的版本号:", detail_info.release)
1.3 系统环境变量
环境变量可以帮我们实现很多功能,包括主文件夹的变换、提示符的显示、执行文件查找的路径等。
在Linux终端输入env,可以查看当前shell环境下的所有环境变量及其内容。
简单介绍其中几个变量:
HOME: 代表用户的主文件夹。例如在命令行中cd可以直接回到用户主文件夹。那就是使用这个变量,有很多程序都可能会用到这个变量的值。
SHELL: 告知了我们目前这个环境使用的shell是哪个程序?Linux默认使用/bin/bash的。
HISTSIZE: 这个与“历史命令”有关,即将我们曾经执行过的命令记录下来,而记录的条数则由这个值来设置。
MAIL: 当我们使用mail这个命令在收信时系统会去读取的邮件信箱文件。
PATH: 就是执行文件查找的路径,目录与目录之间用:分隔,由于文件的查找是依序由PATH变量内的目录来查询,所以目录的顺序也很重要。
Python中调用os.environ效果相当于执行env命令。
print(os.environ)
其返回的结果是有很多变量的,这里截图不完全。
但是根据截图,我们发现其返回值内部是一个字典。我们可以通过key值来获取环境变量对应的value值。
path_info = os.environ
print(path_info['USERNAME'])
print(path_info['PATH'])
print(path_info['TERM'])
2. 文件与目录的操作
2.1 判断是否为绝对路径
import os
from os.path import isabs
print(isabs('/tmp/hello'))
print(isabs('hello.py'))
根据其返回值,我们可以看到/tmp/hello 是绝对路径;hello.py 不是绝对路径。
2.2 生成绝对路径
import os
from os.path import isabs, abspath
filename = 'hello.py'
if not isabs(filename):
print(abspath(filename))
判断到hello.py不是绝对路径,然后就给这个文件自动生成绝对路径并打印。
filename = '/tmp/hello.py'
if not isabs(filename):
print(abspath(filename))
因为/tmp/hello.py这个文件是绝对路径,所以不打印。
如果我们有当前目录的绝对路径,并且有相对路径的文件名/目录名,我们也可以使用join将当前目录的绝对路径+文件名/目录名拼接成一个绝对路径。
import os
from os.path import join
print(join('/tmp/hello', 'python.txt'))
print(join(abspath('.'), 'python.txt'))
这一语句的意思为对当前路径先生成绝对路径再与python.txt这个文件名拼接在一起返回一个绝对路径。
2.3 获取目录名或文件名
filename = '/home/kiosk/Desktop/190323/python/0525/day05/code/day05/doc/passwd'
print('文件名:',os.path.basename(filename))
print('目录名:',os.path.dirname(filename))
2.4 创建目录/删除目录
os.makedirs('pictures/1.png')
相当于linux的mkdir -p ./pictures/1.png 即递归得创建目录及目录下的子文件
os.mkdir('ppt')
这条语句不能递归得创建,只能有一级目录
删除目录
os.rmdir('ppt')
若要删除上面我们创建的pictures目录以及子文件1.png
os.rmdir('pictures')
只需要输入目录名即可。
2.5 创建文件/删除文件
#创建文件
os.mknod('1.txt')
#删除文件
os.remove('1.txt')
2.6 文件重命名
os.rename('old_filename','new_filename')
文件存在才能重命名呀,想想linux的mv命令。
2.7 判断文件或目录是否存在
print(os.path.exists('filename'))
2.8 分离后缀名和文件名&分离目录名和文件名
#目录+文件名
filename = '/home/kiosk/Desktop/190323/python/0525/day05/code/day05/img/monkey.png'
#文件名
basename = 'monkey.png'
#分离文件名和目录
print(os.path.split(filename))
#分离文件名和后缀
print(os.path.splitext(basename))
总算是把无聊的函数调用总结了一下,下一篇博文就将这些函数综合起来,做一些小练习熟悉一下。