最近在學習python,總結一下OS庫的方法
首先我的實驗目錄在這裏
一、os.path.abspath(path)
返回path的絕對路徑
>>> os.path.abspath("train.py")
'E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py'
二、os.path.split(path)
將path分割成目錄和文件名並以元組方式返回
>>> os.path.split("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
('E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master', 'train.py')
>>> os.path.split("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master")
('E:\\my_project\\darknet\\darknet-master\\keras-yolo3', 'keras-yolo3-master')
>>> os.path.split("E:\\my_project\\darknet\\darknet-master\\keras-yolo3")
('E:\\my_project\\darknet\\darknet-master', 'keras-yolo3')
>>> os.path.split("E:\\my_project\\darknet\\darknet-master")
('E:\\my_project\\darknet', 'darknet-master')
>>> os.path.split("E:\\my_project\\darknet")
('E:\\my_project', 'darknet')
>>> os.path.split("E:\\my_project")
('E:\\', 'my_project')
>>> os.path.split("E:")
('E:', '')
三、os.path.dirname(path)
返回path的目錄,其實就是返回os.path.split(path)元組的第一個元素
>>> os.path.dirname("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
'E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master'
>>> os.path.dirname("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master")
'E:\\my_project\\darknet\\darknet-master\\keras-yolo3'
>>> os.path.dirname("E:\\my_project\\darknet\\darknet-master\\keras-yolo3")
'E:\\my_project\\darknet\\darknet-master'
>>> os.path.dirname("E:\\my_project\\darknet\\darknet-master")
'E:\\my_project\\darknet'
>>> os.path.dirname("E:\\my_project\\darknet")
'E:\\my_project'
>>> os.path.dirname("E:\\my_project")
'E:\\'
四、os.path.basename(path)
返回path的文件名,其實就是返回os.path.split(path)元組的第二個元素
>>> os.path.basename("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
'train.py'
>>> os.path.basename("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master")
'keras-yolo3-master'
>>> os.path.basename("E:\\my_project\\darknet\\darknet-master\\keras-yolo3")
'keras-yolo3'
>>> os.path.basename("E:\\my_project\\darknet\\darknet-master")
'darknet-master'
>>> os.path.basename("E:\\my_project\\darknet")
'darknet'
>>> os.path.basename("E:\\my_project")
'my_project'
五、osa.path.commonprefix(list)
list裏面每一個元素都是一個路徑,然後這個函數返回路徑中的公共路徑
>>> list = ["E:\\my_project","E:\\my_project\\darknet","E:\\my_project\\darknet\\darknet-master"]
>>> os.path.commonprefix(list)
'E:\\my_project'
六、os.path.exists(path)
如果path是一個存在的路徑,返回True,否則(otherwise) 返回 False
>>> os.path.exists("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
True
>>> os.path.exists("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master")
True
>>> os.path.exists("E:\\my_project\\darknet\\darknet-master\\keras-yolo3")
True
>>> os.path.exists("E:\\my_project\\darknet\\darknet-master")
True
>>> os.path.exists("E:\\my_project\\darknet")
True
>>> os.path.exists("E:\\my_project")
True
>>> os.path.exists("train.py")
True
下面並不存在這個文件路徑,輸出爲False
>>> os.path.exists("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.txt")
False
>>> os.path.exists("train.txt")
False
應用六:判斷路徑是否存在,不存在則創建:
log_dir = "logs/"
if not os.path.exists(log_dir):
os.makedirs(log_dir)
七、os.path.isabs(path)
如果路徑path是絕對路徑返回True,否則(otherwise)返回False
>>> os.path.isabs("E:\\my_project\\darknet\\darknet-master")
True
>>> os.path.isabs("E:\\my_project\\darknet\\darknet-master\\keras-yolo3")
True
>>> os.path.isabs("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
True
下面不是絕對路徑,輸出爲False
>>> os.path.isabs("train.py")
False
八、os.path.isfile(path)
如果path是一個存在的文件,返回True,否者(otherwise)返回False
>>> os.path.isfile("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
True
>>> os.path.isfile("train.py")
True
下面是一個不存在的文件
>>> os.path.isfile("train.txt")
False
看下面沒有文件的,輸出全是False
>>> os.path.isfile("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master")
False
>>> os.path.isfile("E:\\my_project\\darknet\\darknet-master\\keras-yolo3")
False
>>> os.path.isfile("E:\\my_project\\darknet\\darknet-master")
False
>>> os.path.isfile("E:\\my_project\\darknet")
False
>>> os.path.isfile("E:\\my_project")
False
九、os.path.isdir(path)
如果path裏面存在目錄,返回True,否則返回False
>>> os.path.isdir("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
False
>>> os.path.isdir("E:\\my_project\\darknet")
True
>>> os.path.isdir("E:\\my_project\\darknet\\darknet-master")
True
>>> os.path.isdir("E:\\my_project\\darknet\\darknet-master\\keras-yolo3")
True
>>> os.path.isdir("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master")
True
十、os.path.join(path[,path2[,...])
組合多個路徑並返回
>>> os.path.join("E:\\my_project","darknet\\darknet-master","darknet-master\\keras-yolo3","keras-yolo3-master\\train.py")
'E:\\my_project\\darknet\\darknet-master\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py'
利用os.getcwd()獲取當前路徑並組合返回
>>> os.getcwd()
'E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master'
>>> os.path.join(os.getcwd(),'train.py')
'E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py'
十一、os.path.splitdrive(path)
返回(drivename,fpath)的元組,也就是將驅動磁盤和文件路徑split一下返回元組
>>> os.path.splitdrive("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
('E:', '\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py')
下面利用安裝在D盤的anacoda路徑進行測試一下
>>> os.path.splitdrive("D:\\software1\\anacoda3")
('D:', '\\software1\\anacoda3')
十二、os.splitext(path)
分離擴展名然後按照元組返回
>>> os.path.splitext("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
('E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train', '.py')
十三、os.path.getsize(path)
返回path文件的字節大小,可以傳入絕對路徑和相對路徑
>>> os.getcwd()
'E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master'
>>> os.path.getsize("train.py")
6478
>>> os.path.getsize("E:\\my_project\\darknet\\darknet-master\\keras-yolo3\\keras-yolo3-master\\train.py")
6478
十四、os.walk(path)
os.walk返回的是一個生長器,需要使用next()獲取,最後next()獲取返回一個元組,第一個元素一般是當前相對路徑,第二個元素一般是文件夾的名字,第三個元素一般是文件的名字,在一些文件夾和文件共存的文件夾內操作比較方便。和os.listdir相比就是後者將文件夾內所有子文件夾和文件以列表返回,看例子
samples文件夾和文件如下
li_haiyu@come-on:/media/li_haiyu/E/Mask_RCNN-master/samples$ python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getcwd()
'/media/li_haiyu/E/Mask_RCNN-master/samples'
>>> next(os.walk("./"))
('./', ['shapes', 'balloon', '.ipynb_checkpoints', 'coco', 'nucleus'], ['2.cpp', 'test', 'demo.ipynb', '1.py'])
>>> next(os.walk("./"))[2]
['2.cpp', 'test', 'demo.ipynb', '1.py']
>>> os.listdir("./")
['shapes', '2.cpp', 'test', 'balloon', '.ipynb_checkpoints', 'demo.ipynb', 'coco', '1.py', 'nucleus']
>>>
提醒:
我覺的應該注意一下的就是os.path.exists(path)和os.path.isfile(path),前者是判斷路徑是否存在,後者是判斷該文件是否存在。
The end.
更多請參考:https://www.cnblogs.com/wuxie1989/p/5623435.html & http://docs.python.org/library/os.path.html
2019.4.26 add.
判斷文件夾心是否存在,存在遞歸刪除之
import shutil
import os
path = os.path.join(os.getcwd(),'test')
if os.path.isdir(path):
shutil.rmtree(path)
print("test dir is removed!!!")