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这个东西进入到环境路径中。

posted @ 2020-10-08 20:53  GoBetter  阅读(967)  评论(0)    收藏  举报