Python os 模塊提供了非常豐富的方法用來處理文件和目錄。使用者不需要關注什麼作業系統就可以對文件進行操作。
下面介紹一些常用的模塊和功能:
1、獲取與切換當前活動目錄
os.getcwd()—— 獲取當前活動目錄,當前路徑
os.chdir(path)——活動目錄切換到指定的path
>>> os.chdir('C://') # 活動目錄切換到C:/
>>> os.getcwd() # 獲取當前活動目錄
'C:\\'
>>> os.chdir('C:\\Software\\Python35') # 切換回活動目錄
'C:\\Software\\Python35'
2、當前路徑或路徑下的文件
os.getcwd()——查看當前所在路徑
os.listdir(path)——列舉目錄下的所有文件與目錄,返回列表。
os.walk(path)——列舉目錄下的所有文件與目錄(包含子文件夾),返回文件對象。
>>> import os
>>> os.getcwd() # 獲取當前目錄路徑
'C:\\Software\\Python35'
>>> os.listdir('.') # 返回當前目錄下目錄與文件
['text','Doc','Lib','Libs',..]
>>> os.lisdir('C:\Users\Software\\Python35\Doc')
['Python.doc',.]>>>for root,dirs,files in os.walk('.'):
print(root) # 返回當前路徑,str類型
print(dirs) # 返回當前路徑下所有的子文件,list類型
print(files) # 返回當前路徑下所有非目錄文件
3、目錄的增刪改
os.mkdir(path)—— 創建目錄(只能創建一層)
os.makedirs(path)——遞歸創建目錄
os.rename(src,dst)——重命名文件或目錄,src是原來的名字,dst修改後名字
os.rmdir(path)——刪除指定path空目錄,目錄非空則拋出OSError異常。
os.removedirs(path)——遞歸刪除目錄
>>> os.chdir('C://') # 活動目錄切換到C:/盤下
>>> os.getcwd() # 獲取當前活動目錄
'C:\\'
>>> os.mkdir('test') # 在當前活動目錄創建test目錄
>>> os.path.exists('test') # 確認test目錄創建成功
True
>>> os.rename('test','test001') # test重命名為test001
>>> 'test' in os.listdir('.') # 確認文件或目錄是否存在
False
>>> 'test001' in os.listdir('.')
True
>>> os.rmdir('test001') # 刪除test001目錄
>>> 'test001' in os.listdir('.')
False
4、文件的增刪改
os.remove(path)——刪除指定文件
os.rename(src,dst)——重命名文件或目錄,src是原來的名字,dst修改後名字
文件新增在打開寫入模式時創建格式:
os.open('文件名',os.O_CREAT)或open('文件名','w')
>>> fo=os.open("test.txt", os.O_CREAT) # 創建並打開文件
>>> 'test.txt' in os.listdir('.') # 判斷文件是否存在
True
>>> os.close(fo) # 關閉打開文件
>>> os.rename('test.txt','test001.txt') # 重命名文件
>>> 'test.txt' in os.listdir('.')
False
>>> 'test001.txt' in os.listdir('.')
True
>>> os.remove('test001.txt') # 刪除文件
>>> 'test001.txt' in os.listdir('.')
False
5、相對路徑轉換為絕對路徑
os.path.abspath(path)——返回path的絕對路徑
os.path.isabs(path)——判斷是否為絕對路徑
>>> os.path.abspath('.') # . 表示當前目錄
'C:\\Software\\Python35'
>>> os.path.abspath('..') # .. 表示上級目錄
'C:\\Software'
>>> os.path.isabs('C:\\Software\\Python35') # 路徑是否為絕對路徑
True
6、獲取路徑中的文件名與文件目錄部分
os.path.basename(path)—— 去掉目錄路徑獲取文件名
os.path.dirname(path)—— 去掉文件名獲取目錄
>>> path = 'C:\\Software\\Python35\\python.exe'
>>> os.path.basename(path)
'python.exe'
>>> os.path.dirname(path)
'C:\\Software\\Python35'
7、判斷路徑是文件還是文件夾
os.path.isdir(path) ——是否是目錄
os.path.isfile(path) ——是否是文件
當文件或目錄下不存在時返回Flase
>>> os.path.isfile('C:\\Software\\Python35\\python.exe') # 是否為文件
True
>>> os.path.isfile('C:\\Software\\Python35')
False
>>> os.path.isfile('.\\python.exe') # 可以使用相對路徑
True
>>> os.path.isdir('C:\\Software\\Python35')
True
>>> os.path.isdir('python.exe')
False
>>> os.path.isdir('.')
True
8、查看文件或目前是否存在
os.path.exists(path) —— 文件或目錄是否存在,返回True或Flase
>>> os.path.exists('lib')
True
>>> os.path.exists('.\\python125.exe')
False
9、查看文件時間和文件大小
os.path.getmtime(path) ——文件或文件夾最後修改時間,返回時間戳
os.path.getatime(path) ——文件或文件夾最後訪問時間,返回時間戳
os.path.getctime(path) ——文件或文件夾創建時間,返回時間戳
os.path.getsize(path) ——文件或文件夾大小,若是文件夾返回0
10、路徑合成與拆分
os.path.split(path) ——將路徑分解為(文件夾,文件名)的元組
os.path.join(path1,path2,) ——將path進行組合,若其中有絕對路徑,則之前的path將被刪除
>>> path='C:\\Software\\Python35\\python.exe'
>>> os.path.split(path) # 拆分路徑
('C:\\Software\\Python35', 'python.exe')
>>> os.path.split('C:\\Software\\Python35') # 注意下一行的區別
('C:\\Software', 'Python35')
>>> os.path.split('C:\\Software\\Python35\\')
('C:\\Software\\Python35', '')
>>> os.path.join('C:\\Software\\Python35', 'python.exe')
'C:\\Software\\Python35\\python.exe'
>>> os.path.join('C:\\Software\\Python35\\a\b', 'C:\\Software\\Python35\\c')
'C:\\Software\\Python35\\c'
>>> os.path.split(os.path.split(os.path.realpath(__file__))[0])[0] # 返回當前目錄的絕對路徑
練習:
創建一個函數,獲取文件夾下包含子文件夾的所有文件路徑,並且存入list輸出?
import os
path = os.getcwd()
# 使用os.walk(path)獲取文件屬性
def list_file_walk(path):
file_list = []
for root, dirs, files in os.walk(path):
for file in files:
file_path = os.path.join(root, file)
file_list.append(file_path)
return file_list
''' 遞歸函數獲取文件'''
def list_file_recursive(path,list_name):
filelist = os.listdir(path)print(len(list_file_walk(path)))
print(len(list_file_recursive(path,[])))