1、特性
上一章节学习了File文件操作,可以进行文件读写等操作,os相较于File对象的操作来说,能力得到进一步的延伸与扩展,OS更多的使用场景是对文件夹及文件的综合操作。
使用os模块时需要提前导入它
import os
2、常用函数
函数名 | 描述 |
---|---|
os.name | 属性,返回运行平台类型,比如对于Windows,它是’nt’,而对于Linux / Unix用户,它是’posix’ |
os.getcwd() | 得到当前工作目录,即当前Python脚本工作的目录路径 |
os.getenv(key) | 获取系统环境变量key对应的值,如果没有这个变量则返回none |
os.listdir(path) | 列出路径下的文件或文件夹 ,仅一级子集,返回值类型为list |
os.stat(filePath) | 获取文件属性 |
os.path.exists(filePath) | 判断文件是否存在 |
os.path.exists(folderPath) | 判断文件夹是否存在 |
os.path.isabs(path) | 判断路径是否为绝对路径 |
os.path.isdir(folderPath) | 判断是否为文件目录 |
os.path.isfile(filePath) | 判断是否为文件 |
os.path.getsize | 获取文件大小 |
os.path.split(filePath) | 分离文件名, 返回一个元组,第一个元素为文件路径,第二个元素为文件名 |
os.path.splitext(filePath) | 分离扩展名, 返回一个元组,第一个元素为文件路径+"\"+文件名称(去掉扩展名的文件名),第二个元素为扩展名 |
os.path.dirname(filePath) | 获取文件的路径 |
os.path.basename(myFilePath) | 直接获取文件名 |
os.rename(sPath,tPath) | 重命名文件夹或文件 |
os.remove(filePath) | 删除文件 |
os.rmdir(folderPath) | 删除文件夹 |
os.makedirs(folderPath) | folderPath 可以是多级,递归创建目录 |
os.removedirs(folderPath) | 删除多个目录,注意只会删除一级一级为空的目录,且是会回溯删除父级为空的路径 |
3、案例
import os
# os帮助模块
# help(os)
# os.rename函数帮助模块
# help(os.rename)
# 比如对于Windows,它是'nt',而对于Linux / Unix用户,它是'posix'
print("正在使用的平台:", os.name)
# 函数得到当前工作目录,即当前Python脚本工作的目录路径
print("当前工作目录:", os.getcwd())
# 获取一个环境变量,如果没有这个变量则返回none
print("获取环境变量的值:", os.getenv("JAVA_HOME"))
# 设置一个环境变量 这里key,val 随便设置 win10测试失败
# os.putenv("PYTHON_TEST_HOME", "c\\xxx")
# 列出路径下的文件或文件夹 仅仅一级子集
list = os.listdir("D:" + os.sep + "python_workplace\\venv")
for p in list:
print(p)
# 文件夹路径
rootFolderPath = "D:\\python_workplace\\venv"
# 文件路径
myFilePath = rootFolderPath + os.sep + "pyvenv.cfg"
print("获取文件属性:", os.stat(myFilePath))
print("判断文件是否存在:", os.path.exists(myFilePath))
print("判断文件夹是否存在:", os.path.exists(rootFolderPath))
print("判断路径是否为绝对路径:", os.path.isabs(".\\python\\"))
print("判断是否为文件目录:", os.path.isdir(rootFolderPath))
print("判断是否为文件:", os.path.isfile(myFilePath))
print("获取文件大小:", os.path.getsize(myFilePath))
# 返回一个元组
print("分离文件名:", os.path.split(myFilePath))
# 返回一个元组
print("分离扩展名:", os.path.splitext(myFilePath))
# 获取路径名:
print("获取路径名:", os.path.dirname(myFilePath))
# 获取文件名:
print("获取文件名:", os.path.basename(myFilePath))
# 当前路径下,如果不存在,则创建文件夹
if not os.path.exists(rootFolderPath + "\\Test"):
os.mkdir(rootFolderPath + "\\Test")
# 在Test文件夹下创建一个文件
file = open(rootFolderPath + "\\Test\\a.txt", 'w')
file.flush()
file.close()
# ============以下语句只允许运行其中的一条,且从上往下的顺序放开执行,以便观察文件及文件夹的变化====================
# 重命名文件夹
# os.rename(rootFolderPath + "\\Test", rootFolderPath + "\\TestCopy")
# 重命名文件 其中 os.sep 可代替\\
# os.rename(rootFolderPath + "\\TestCopy\\a.txt", rootFolderPath + "\\TestCopy\\b.txt")
# 删除文件
# os.remove(rootFolderPath + "\\TestCopy\\b.txt")
# 删除单个目录
# os.rmdir(rootFolderPath + "\\TestCopy")
# 递归创建目录
# os.makedirs(rootFolderPath + "\\Test2\\Test22\\Test222\\Test2222")
# 删除单个目录
# os.rmdir(rootFolderPath + "\\Test2\\Test22\\Test222\\Test2222")
# 删除多个目录,注意只会删除一级一级为空的目录,是会回溯删除父级为空的路径
# os.removedirs(rootFolderPath + "\\Test2\\Test22\\Test222")
案例中的代码尽可能运行一次吧,尤其是文件夹的创建和删除必须要执行才有更加清晰的认识。
其中上面这段代码第52行后的输出结果没有在本文中打印出来,请读者按照代码中注释进行操作。
输出结果:
正在使用的平台: nt
当前工作目录: D:\python_workplace\venv
获取环境变量的值: C:\Program Files\Java\jdk1.8.0_231
Include
Lib
pyvenv.cfg
Scripts
Test
test.txt
TestFile.py
TestOs.py
获取文件属性: os.stat_result(st_mode=33206, st_ino=1688849860419383, st_dev=83458, st_nlink=1, st_uid=0, st_gid=0, st_size=112, st_atime=1583551674, st_mtime=1583551674, st_ctime=1583550374)
判断文件是否存在: True
判断文件夹是否存在: True
判断路径是否为绝对路径: False
判断是否为文件目录: True
判断是否为文件: True
获取文件大小: 112
分离文件名: ('D:\\python_workplace\\venv', 'pyvenv.cfg')
分离扩展名: ('D:\\python_workplace\\venv\\pyvenv', '.cfg')
获取路径名: D:\python_workplace\venv
获取文件名: pyvenv.cfg
4、总结
本案例操作文件新增删除比较多,需要读者自行动手放开注释运行,观察文件夹及文件变化。
os模块包括非常多的文件操作,本文罗列了实践过的一些常用的函数,更多的函数操作可以查看官方文档,非常之多。包括各种平台的函数操作都是有一些区别的。