os.path.isdir( ), os.path.isfile(),os.listdir( ), os.walk( )
參考網址:https://blog.csdn.net/xxn_723911/article/details/78795033
Python的os
模塊封裝了操作系統的目錄和文件操作,要注意這些函數有的在os
模塊中,有的在os.path
模塊中。
在Python程序中如何操作目錄和文件?有兩種方法:
(1)操作系統提供的一些命令,只是簡單地調用了操作系統提供的接口函數
(2)Python內置的os模塊,也可以直接調用操作系統提供的接口函數
分類 | 方法、函數 | 作用 |
操作系統 | 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 directory
rmdir:remove directory
chdir:change directory
操作系統
os.name :操作系統類型,如果是nt,就是Windows系統;如果是posix,說明系統是Linux、Unix或Mac OS X
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"))
小結
1、路徑分隔符,最好使用/, // , \\,盡量不用\,轉義符也是這個符號,有時正常,有時運行錯誤
2、把兩個路徑合成一個時,不要自己直接拼寫出目錄路徑,而要通過os.path.join( )函數,這樣可以正確處理不同操作系統的路徑分隔符。
在Linux/Unix/Mac下,os.path.join( )返回結果:part-1/part-2
在Windows下,os.path.join( )返回結果:part-1\part-2
3、同樣的道理,拆分路徑時,也不要直接去拆字符串,而要通過os.path.split( )函數
4、這些合並、拆分路徑的函數,並不要求目錄和文件要真實存在,它們只對字符串進行操作。
拆分路徑
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:列出了路徑下所有的文件名稱列表