os库的使用
在用jupyter画决策树时,用到了这样一行代码
os.environ['PATH'] += os.pathsep + 'E:\graphviz\bin'
对于os库自己本身不了解,因此借这个机会对os库的基本用法学习一遍
os模块与操作系统相关
os.system
os.system("notepad.exe") #直接打开notepad
os.startfile
os.startfile(r'C:\Program Files (x86)\Tencent\QQ\Bin\QQ.exe') #打开指定文件
os.getcwd()
print(os.getcwd())#获取当前工作目录,current work directory
结果
E:\hands-on machine learn\capter2\os
os.listdir()
lst = os.listdir('E:\hands-on machine learn\capter2\os')#获取当前目录下的所有文件和目录信息

结果
['demo15.py', 'demo16.py', 'demo17.py', 'demo18.py', 'demo19.py', 'demo20.py', 'newdir']
创建\删除目录
在当前目录创建
os.mkdir('newdir2')#在当前目录路径下创建下一级目录 os.makedirs('lou/bei/wu')#同理,创建多级目录 os.rmdir('newdir2')#删除目录 os.removedirs('lou/bei/wu')#删除多级目录
自己设置路径创建目录,之后同理
os.mkdir(r'E:\fnirs\lou')
...
os.chdir()
os.chdir(r'E:\hands-on machine learn\capter2\datasets\housing')#将当前工作目录设置为path print(os.getcwd())#获取工作路径
结果
E:\hands-on machine learn\capter2\datasets\housing
os.path
print(os.path.abspath('demo15.py')) print(os.path.exists('demo15.py'),os.path.exists('demo18.py'))#用于判断在当前包下,文件是否存在 True True print(os.path.join('E:\hands-on machine learn','demo19.py'))#拼接路径 E:\hands-on machine learn\demo19.py print(os.path.split('E:\hands-on machine learn\capter2\os\demo15.py'))#分离目录名和文件名 ('E:\\hands-on machine learn\\capter2\\os', 'demo15.py') print(os.path.splitext('demo15.py'))#分离文件名和后缀名 ('demo15','.py') print(os.path.basename("E:/hands-on machine learn/capter2/os/demo17.py"))#将文件名提取出来 demo17.py print(os.path.dirname("E:/hands-on machine learn/capter2/os/demo17.py"))#将目录名提取出来 E:/hands-on machine learn/capter2/os print(os.path.isdir('E:/hands-on machine learn/capter2/os')) #是否是目录 true print(os.path.isdir('E:/hands-on machine learn/capter2/os/demo17.py'))#false 是文件不是目录
结果
E:\hands-on machine learn\capter2\os\demo15.py True True E:\hands-on machine learn\demo19.py ('E:\\hands-on machine learn\\capter2\\os', 'demo15.py') ('demo15', '.py') demo17.py E:/hands-on machine learn/capter2/os True False
一个小练习
path = os.getcwd()#获取当前工作目录路径 lst = os.listdir(path)#获取该路径下文件和目录 print(lst) for filename in lst: if filename.endswith('.py'): print(filename)
答案
['demo15.py', 'demo16.py', 'demo17.py', 'demo18.py', 'demo19.py', 'demo20.py', 'newdir'] demo15.py demo16.py demo17.py demo18.py demo19.py demo20.py
os.walk:主要用来遍历一个目录内各个子目录和子文件
目录情况如下

注意:以demo19为脚本运行
path = os.getcwd() lst_files=os.walk(path) #返回元组,元组里有目录路径,目录名(下一级),文件名(下一级) print(lst_files)
结果
<generator object walk at 0x000001EBC669AA48>
遍历这个生成器对象
for dirpath,dirname,filename in lst_files: print(dirpath) print(dirname) print(filename) print('------------------')
结果
E:\hands-on machine learn\capter2\os ['newdir'] ['demo15.py', 'demo16.py', 'demo17.py', 'demo18.py', 'demo19.py', 'demo20.py'] ------------------ E:\hands-on machine learn\capter2\os\newdir ['sub'] ['1.py', '2.py'] ------------------ E:\hands-on machine learn\capter2\os\newdir\sub [] ['sub1.py'] ------------------
打印文件名
for dirpath,dirname,filename in lst_files: for dir in dirname: print(os.path.join(dirpath,dir)) print('======================') for file in filename: print(os.path.join(dirpath,file))
结果
E:\hands-on machine learn\capter2\os\newdir ====================== E:\hands-on machine learn\capter2\os\demo15.py E:\hands-on machine learn\capter2\os\demo16.py E:\hands-on machine learn\capter2\os\demo17.py E:\hands-on machine learn\capter2\os\demo18.py E:\hands-on machine learn\capter2\os\demo19.py E:\hands-on machine learn\capter2\os\demo20.py E:\hands-on machine learn\capter2\os\newdir\sub ====================== E:\hands-on machine learn\capter2\os\newdir\1.py E:\hands-on machine learn\capter2\os\newdir\2.py ====================== E:\hands-on machine learn\capter2\os\newdir\sub\sub1.py
os.environ
environ = os.environ['PATH'] print(environ)
结果(太长了没有截全部)

这个东西其实就是环境变量中的路径

在第一行代码中
os.environ['PATH'] += os.pathsep + 'E:\graphviz\bin'
是为了确保graphviz这个东西进入到环境路径中。

浙公网安备 33010602011771号