[TOC]
今天分享下python内置模块中的OS
模块,os模块是大家经常会使用到的,虽然有path
这个模块替代os
, 但是大家可能还是比较熟悉os
吧,那么我自己也总结下os
模块中常用的一些方法和属性。
怎么开始用这个模块呢,因为是内置的,所以不用额外安装,直接import
即可
import os
1.系统操作相关
方法和变量 | 用途 |
---|---|
os.name | 查看当前操作系统的名称,windows返回nt ,linux返回posix
|
os.environ | 获取系统环境变量 |
os.sep | 当前平台的路径分隔符,windown是\ ,linux是'/' |
os.altsep | 可替代的路径分隔符,window中为/ . |
os.extsep | 文件名和文件拓展名之间分隔符的符号,windown为.
|
os.pathsep | PATH环境变量中的分隔符,window为; linux为:
|
os.linesep | 行结束符,windows为\r\n , linux为\n
|
os.devnull | window为nul ,linux为/dev/null
|
os.defpath | 当使用exec函数族的时候,如果没有指定PATH环境变量,则默认会查找os.defpath 中的值作为子进程PATH的值。 |
以下简单列几个常用的属性:
os.name
说明:返回的是当前操作系统的名称.
import os
>>> os.name
# windows返回结果:
nt
# linux返回结果
'posix'
os.environ
说明:获取当前系统的环境变量.
>>> os.environ
# windows返回结果
environ({'ALLUSERSPROFILE': 'C:\\ProgramData'...省略...
# linux返回结果
>>> os.environ
environ({'XDG_SESSION_ID': '2', 'HOSTNAME': 'localhost.localdomain'...省略...
os.sep
说明:获取当前操作系统路径分隔符.
分隔符\
在windows和linux都能使用。
>>> os.sep
# windows返回结果:
'\\'
# linux返回结果:
'/'
举一个小栗子:
# windows组合一个路径
path = "log"
with open(path + '/' + 'test.txt', 'w') as f:
f.write('hello world.')
os.linesep
说明:获取当前操作系统行的分隔符.
>>> os.linesep
# windows返回结果
'\r\n'
# linux返回结果
'\n'
举个小栗子对比下:
windows环境下使用\r
行分隔符,也会换行
windows环境下使用\r\n
行分隔符,相当于换2行:
2.文件和目录的操作
方法和变量 | 用途 |
---|---|
os.getcwd() | 获取当前工作目录,即当前python脚本工作的目录路径 |
os.chdir() | 改变当前工作目录 |
os.curdir | 返回当前目录. , |
os.pardir | 获取当前目录的父目录..
|
os.makedirs(') | 当前路径创建一个目录(可多级目录创建) |
os.removedirs() | 递归删除空目录 |
os.mkdir() | 生成单级目录 |
os.rmdir() | 删除单级空目录 |
os.listdir() | 列出指定目录下的所有文件和子目录,包括隐藏文件. |
os.remove(filename) | 删除文件 |
os.rename(old, new) | 重命名文件或文件夹 |
os.stat() | 获取文件或文件夹信息 |
os.path.abspath() | 获取文件或文件夹的绝对路径 |
os.path.split() | 获取返回文件夹和文件二元组 |
os.path.dirname() | 获取返回的是路径中的目录名,看做是split 后的第一个元素 |
os.path.basename() | 获取返回的是路径中的文件名,看做是split 后的第二个元素 |
os.path.exists() | 判断文件夹、文件是否存在,返回的是布尔值:true 、false
|
os.path.isabs() | 判断路径是否是绝对路径,返回的是布尔值:true 、false
|
os.path.isfile() | 判断是否是文件,返回的是布尔值:true 、false
|
os.path.isdir() | 判断是否是目录,返回的是布尔值:true 、false
|
os.path.join() | 将多个路径组合返回一个路径 |
os.path.getsize() | 获取返回的是文件内容字符串的长度 |
os.walk() | 获取递归目录,返回的是一个三元组(根目录, 目录, 文件) |
os.getcwd()
说明:获取当前工作目录.
>>> os.getcwd()
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37'
os.chdir()
说明:改变当前工作目录(切换目录).
# 字符串前面加个r,让里面符号不转义
>>> os.chdir(r"E:\01 Network\07 Program\python\test")
# 当前工作目录已切换
>>> os.getcwd()
'E:\\01 Network\\07 Program\\python\\test'
os.makedirs()
说明:可创建多级目录.
>>> os.makedirs("test1/test11")
os.removedirs()
说明:可递归删除空目录,一定都是==空目录==才能删除.
>>> os.removedirs("test1/test11")
如果不是空目录,则会报错:
OSError: [WinError 145] 目录不是空的。: 'test1/test11'
os.mkdir()
说明:创建单级目录.
>>> os.mkdir("test1")
如果创建多级不存在目录或者已存在目录创建,都会报错:
>>> os.mkdir("test1/test11")
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
os.mkdir("test1/test11")
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'test1/test11'
os.rmdir()
说明:删除单级空目录.
>>> os.rmdir("test1")
如果目录不为空,则会报错:
>>> os.rmdir("test1")
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
os.rmdir("test1")
OSError: [WinError 145] 目录不是空的。: 'test1'
os.listdir()
说明:列出当前目录下的文件夹、文件及隐藏文件.
>>> os.listdir()
['.git', '.idea', 'book', 'network', 'new_test.txt', 'test1', 'venv', '__pycache__']
os.remove()
说明:删除文件.
>>> os.remove("test1/test1.txt")
如果文件不存在,则会报错:
>>> os.remove("test1/test1.txt")
Traceback (most recent call last):
File "<pyshell#133>", line 1, in <module>
os.remove("test1/test1.txt")
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'test1/test1.txt'
os.rename()
说明:重命名文件或文件夹.
>>> os.rename("test1/test1.txt", "test1/test11.txt")
>>> os.listdir("test1")
['test11', 'test11.txt', 'test12'] # 已经变成了test11.txt
os.stat()
说明:获取文件或文件夹信息.
# 目录信息
>>> os.stat("test1")
os.stat_result(st_mode=16895, st_ino=2533274791006554, st_dev=3243071515, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1630948576, st_mtime=1630948538, st_ctime=1630947394)
# 文件信息
>>> os.stat("test1/test11.txt")
os.stat_result(st_mode=33206, st_ino=562949954031987, st_dev=3243071515, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1630948524, st_mtime=1630948524, st_ctime=1630948489)
os.path.abspath()
说明:获取文件或文件夹的绝对路径.
# 输入文件名,可以获取绝对路径
>>> os.path.abspath("test1/test11.txt")
'E:\\01 Network\\07 Program\\python\\test\\test1\\test11.txt'
os.path.split()
说明:将路径分割成以文件夹和文件名的二元组.
# 元组第一个元素是文件夹,第二个元素是文件名
>>> os.path.split("test1/test11.txt")
('test1', 'test11.txt')
如果文件夹为空,则返回空字符串、文件夹二元组:
>>> os.path.split("test1")
('', 'test1')
os.path.dirname()
说明:返回的是路径中目录名,可以看作是split
分割后的第一个元素.
>>> os.path.dirname("test1/test11.txt")
'test1'
os.path.basename()
说明:返回的是路径中的文件名,可以看作是split
分割后的第二个元素.
>>> os.path.basename("test1/test11.txt")
'test11.txt'
os.path.exists()
说明:判断文件夹、文件是否存在,返回的是布尔值true
或ffalse
.
# 判断目录
>>> os.path.exists("test1")
True
# 判断文件
>>> os.path.exists("test.txt")
True
# 可以判断带路径的文件
>>> os.path.exists("test1/test11.txt")
True
这个方法我们是会经常用到的,我给大家举例一下:
# 判断是否存在文件,如不存在则创建一个文件,并写入数据.
if filepath = r"E:\Network\Program\python\test\test.txt"
if os.path.exists(filepath) == False:
with open(filepath, 'w') as f:
f.write('hello world.')
os.path.isabs()
说明:判断是否是绝对路径,返回的是布尔值true
或false
.
# 不是绝对路径,返回false
>>> os.path.isabs("test1")
False
# 先查看当前路径
>>> os.getcwd()
'E:\\01 Network\\07 Program\\python\\test'
# 绝对路径,返回True
>>> os.path.isabs(r"E:\\01 Network\\07 Program\\python\\test")
True
os.path.isfile()
说明:判断是否是文件,返回的是布尔值true
或false
.
>>> os.path.isfile("test1/test11.txt")
True
os.path.isdir()
说明:判断是否是目录,返回的是布尔值true
或false
.
>>> os.path.isdir("test1")
True
>>> os.path.isdir("test2")
False
os.path.join()
说明:将多个路径组合返回一个路径.
>>> os.path.join("test", "test1")
'test\\test1'
os.path.getsize()
说明:返回的是文件内容字符串的长度
# 文件内容写的是:hello world.
>>> os.path.getsize("test.txt")
12
os.walk
说明:可以对目录进行递归,返回的是一个三元组(父目录, 子目录, 文件)
方法walk(top, topdown=True, onerror=None, followlinks=False):
- topdown=True:默认遍历递归从上到下.
- onerror=None:默认不调用任何函数.
- followlinks=False:默认不遍历超连接;
举个小栗子:
try:
for root, dirs, files in os.walk(path):
print('-' * 50 + "根目录" + '-' * 50)
print(root)
print('-' * 50 + "目录" + '-' * 50)
print(dirs)
print('-' * 50 + "文件" + '-' * 50)
print(files)
except Exception as e:
print(e)
运行结果如下所示:
举例一个常用的例子,通过os.walk()
遍历目录,zipfile
压缩打包:
import os
import zipfile
from datetime import datetime
path = r"E:\01 Network\07 Program\python\test\walk"
LogTime = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
try:
with zipfile.ZipFile(LogTime + ".zip", 'w') as zip:
zip_list = []
for root, dirs, files in os.walk(path):
for file in files:
zip_list.append(os.path.join(root, file))
for dir in dirs:
zip_list.append(os.path.join(root, dir))
for i in zip_list:
zip.write(i, i.replace(path, ''))
except Exception as e:
print(e)
运行后结果如下所示:
<center>运行脚本和压缩后的文件包都在同一个路径。</center>
<center>打开压缩包,验证下目录结构</center>
今天分享python内置模块os
到此就结束了,后期也会连载其他内置模块或第三方模块.
如果大家需要深入研究的请参考官方文档。
链接:os模块
如果喜欢的我的文章,欢迎关注我的公号:点滴技术,扫码关注,不定期分享