os.path.isdir( ), os.path.isfile(),os.listdir( ), os.walk( )python
參考網址:https://blog.csdn.net/xxn_723911/article/details/78795033函數
Python的os
模塊封裝了操做系統的目錄和文件操做,要注意這些函數有的在os
模塊中,有的在os.path
模塊中。spa
在Python程序中如何操做目錄和文件?有兩種方法:操作系統
(1)操做系統提供的一些命令,只是簡單地調用了操做系統提供的接口函數.net
(2)Python內置的os模塊,也能夠直接調用操做系統提供的接口函數3d
分類 | 方法、函數 | 做用 |
操做系統 | os.name | 查看操做系統類型 |
os.uname()函數 | 操做系統詳細信息 | |
環境變量 | os.environ | 環境變量 |
os.environ.get('key') | 某個環境變量的值 | |
操做文件、目錄 | os.getcwd() | 獲取當前目錄 |
os.listdir( ) | 目錄列表 | |
os.mkdir() | 建立文件、目錄 | |
os.rmdir() | 刪除文件、目錄 | |
os.chdir() | 改變默認目錄 | |
shutil.copyfile() | 複製文件 | |
文件重命名、刪除 | os.rename() | 文件重命名 |
os.remove() | 文件刪除 | |
os.path模塊 | os.path.abspath() | 絕對路徑 |
os.path.join() | 重組路徑 | |
os.path下拆分路徑 | os.path.split() | 拆分路徑 |
os.path.splitext() | 拆分路徑的擴展名 | |
os.path下判斷函數 | os.path.isdir() | 判斷目錄 |
os.path.isfile() | 判斷文件 |
mkdir:make directorycode
rmdir:remove directoryblog
chdir:change directory接口
操做系統
os.name :操做系統類型,若是是nt,就是Windows系統;若是是posix,說明系統是Linux、Unix或Mac OS Xrem
os.uname( )函數:獲取詳細的系統信息。
注意:uname( )函數在Windows上不提供,即,os模塊的某些函數是跟操做系統相關的。
環境變量
os.environ:操做系統中定義的環境變量,所有保存在os.environ這個變量中。能夠看作是一個字典dict,
os.environ.get( ' key ' ):獲取某個環境變量的值(可看作,字典dict中根據key值獲取對應的value值),注意:key要用引號引發來
import os print(os.name) print(os.uname)
操做文件和目錄
操做文件和目錄的函數,一部分放在os模塊中,一部分放在os.path模塊中,這點須要注意。
os.getcwd方法:獲取當前目錄
import os os.getcwd()
os.listdir( )方法:獲取目錄列表,即返回指定的路徑下包含的文件或文件夾的名字的列表。只支持在Unix、Windows系統使用。
例如,獲取當前路徑下的子目錄列表
import os os.listdir("./")
os.mkdir方法:建立文件、目錄
import os os.mkdir("張三")
os.rmdir方法:刪除文件夾、目錄
例如,刪除當前路徑下的「張三」目錄
import os os.rmdir("張三")
os.chdir方法:改變默認目錄
例如,將當前目錄改編爲上一級目錄
import os os.chdir("../")
複製文件:shutil模塊的copyfile( )函數
os模塊中沒有複製文件的函數,緣由是:複製文件並不是由操做系統提供的系統調用。理論上,經過讀寫文件能夠完成文件複製,只不過要多寫不少代碼。
shutil模塊提供了copyfile( )函數,還能夠在shutil模塊中找到不少實用函數,能夠看作是os模塊的補充。
文件的重命名和刪除
os.rename( src, dst ) :src:須要修改的文件名, dst :修改後的新文件名
os.remove( path ):path:指定路徑下的文件
import os os.rename("畢業論文.txt","畢業論文-最終版.txt") os.remove("畢業論文.txt")
os.path模塊
os.path.abspath(' . '):查看當前目錄的絕對路徑
os.path.join(path, 新目錄名 ):把建立目錄以後的最終目錄路徑效果表示出來,而後建立目錄路徑和刪除目錄路徑時,把這個最終效果當作參數便可
os.mkdir(path):能夠在path路徑中查看建立的新目錄
import os #路徑中的目錄等級是用/,//,\\,不能使用\,這個表示轉義符 print("下面四句是相互有聯繫的") print(os.path.abspath("."))#查看當前目錄的絕對路徑 # 在某個目錄下建立一個新目錄,首先把新目錄的完整路徑表示出來: #這個例子是在上面一句的絕對路徑下,建立新的目錄,這個join的意思是,先把建立新目錄以後的最終目錄路徑效果表示出來 print(os.path.join("F:\Program\python_pycharm",'testdir')) #建立目錄,make directory print(os.mkdir("F:/Program/python_pycharm/testdir")) #刪除目錄,remove directory print(os.rmdir("F:/Program/python_pycharm/testdir"))
小結
一、路徑分隔符,最好使用/, // , \\,儘可能不用\,轉義符也是這個符號,有時正常,有時運行錯誤
二、把兩個路徑合成一個時,不要本身直接拼寫出目錄路徑,而要經過os.path.join( )函數,這樣能夠正確處理不一樣操做系統的路徑分隔符。
在Linux/Unix/Mac下,os.path.join( )返回結果:part-1/part-2
在Windows下,os.path.join( )返回結果:part-1\part-2
三、一樣的道理,拆分路徑時,也不要直接去拆字符串,而要經過os.path.split( )函數
四、這些合併、拆分路徑的函數,並不要求目錄和文件要真實存在,它們只對字符串進行操做。
拆分路徑
os.path.split( ):能夠把一個路徑拆分爲兩部分,後一部分老是最後級別的目錄或文件名
os.path.splitext( ):用來獲取文件擴展名,即文件後綴名
print(os.path.split("E:\Test\testdir\憫農.txt")) print(os.path.splitext("E:\\Test\\憫農.txt"))
判斷目錄、文件
os.path.isdir( ) 函數:判斷某一路徑是否爲目錄
os.path.isdir(path)
os.path.isfile( ) 函數:判斷某一路徑是否爲文件
os.path.isfile(path)
實例:判斷E:\照片 這個路徑是否爲目錄或文件
1 import os 2 print('判斷該路徑是否爲目錄:',os.path.isdir('E:\照片')) 3 print('判斷該路徑是否爲文件:',os.path.isfile('E:\照片'))
實戰:
如何利用Python的特性來過濾文件。
如,列出當前目錄下的全部目錄 & 列出全部的 .py 文件
#列出當前目錄下的全部目錄 s=[x for x in os.listdir('.') if os.path.isdir(x)] print("列出當前目錄下的全部目錄:",s) #列出全部的py文件 t=[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py'] print("列出全部的py文件:",t)
os.walk( )方法:
返回指定的路徑下包含的文件或文件夾的名字的列表,還能夠返回文件夾中文件名列表
實例:路徑下的文件列表
1 Test_file: 2 file1: 3 test1.txt 4 test2.txt 5 test3.txt 6 file2: 7 test1.txt 8 test2.txt 9 test3.txt 10 test1.txt 11 test2.txt 12 test3.txt
1 import os 2 3 path = 'E:\Test_file' 4 for parent,dirnames,filenames in os.walk(path): 5 print(parent,dirnames,filenames)
運行結果:
下面代碼可得到指定路徑下的全部文件及文件夾下子文件的目錄列表:
第一種:
1 import os 2 3 path = 'E:\Test_file' 4 for parent,dirnames,filenames in os.walk(path): 5 for filename in filenames: 6 print(os.path.join(parent,filename))
運行結果:
第二種:
1 import os 2 3 path = 'E:\Test_file' 4 for parent,dirnames,filenames in os.walk(path): 5 print('parent:',parent) 6 print('dirname:',dirnames) 7 print('filenames:',filenames) 8 print( ' ')
運行結果:
結論:
經過上面兩種的運行結果,能夠知道:
parent:指目錄下全部文件及文件夾的名稱列表
dirname:文件夾的名字
filenames:列出了路徑下全部的文件名稱列表