python檔案及目錄操作
寫在前面
在python中,內建了檔案(file)物件,通過一些內建的方法就可以實現對檔案的操作,例如open()方法建立一個檔案物件,write()方法向檔案寫入內容。
一.檔案基本操作
1.建立和開啟檔案
想要操作檔案,先要建立或者開啟指定檔案並建立檔案物件,可以通過內建函式open()來實現。
file = open(file_name[,mode[,buffering]])
'''
file_name : 要建立或者開啟的檔名
mode : 用於指定檔案開啟的方式
'''
mode引數的引數值表
模式 | 描述 |
---|---|
r | 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。 |
rb | 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。這是預設模式。 |
r+ | 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。 |
rb+ | 以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。 |
w | 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
wb | 以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
w+ | 開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
wb+ | 以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
a | 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
ab | 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
a+ | 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。 |
ab+ | 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。 |
注意
採用open()函式開啟檔案時,預設採用的是GBK編碼,如果想要用其他編碼方式,需要加上encoding引數
file = open('./text.txt','a+',encoding='utf-8')
#需要採用原檔案用的編碼方式開啟,不然會報錯
2.關閉檔案
開啟檔案之後,需要及時關閉,以免對檔案造成不必要的破壞。可以用內建函式close()。
file = open('./text.txt','a+')
file.close()
注
close()函式先重新整理緩衝區中還沒有寫入的資訊,將其寫入到檔案中,再關閉檔案,起到對檔案的保護作用。
3.寫入檔案
語法
file = write(string)
demo
#開啟檔案
file = open('./text.txt','a+')
#寫入檔案
file = write('不負程式碼,不負卿')
#關閉檔案
file.close()
注:
再寫入檔案的時候要注入開啟檔案的時候是處於什麼模式,不然會把原資料覆蓋掉。
4.讀取檔案
讀取檔案的前提是在開啟檔案時,指定的開啟模式為r(只讀)或者r+(讀寫)否則,會丟擲異常。
(1)讀取指定字元
file.read([size])
#size :用於指定要讀取的字元個數,如果省略,則一次性讀取所有內容。
(2)讀取一行
file.readline()
該方法用於讀取一行文字
(3)讀取全部行
file.readlins()
二.目錄操作
python內建了os模組及子模組os.path用於對目錄或檔案的操作。
os模組提供的與目錄相關的函式
函式 | 說明 |
---|---|
getcwd() | 返回當前的工作目錄 |
listdir(path) | 返回指定路徑下的檔案和目錄資訊 |
mkdir(path[,mode]) | 建立目錄 |
makedirs(path/path2.....) | 建立多級目錄 |
rmdir(path) | 刪除目錄 |
removedirs(/path1/path2...) | 刪除多級目錄 |
chdir(path) | 把path設定為當前工作目錄 |
walk(top[,topdown[,onerror]) | 遍歷 |
access(path,accessmode) | 獲取指定檔案是否有某個許可權(accessmode的等於R_OK(讀取),W_OK(寫入),X_OK(執行),F_OK(存在)),如果有指定的許可權,返回1,否則返回0. |
chmod(path,mode) | 修改path指定檔案的訪問許可權 |
remove(path) | 刪除指定的檔案路徑 |
rename(src,dst) | 將檔案或目錄src重新命名為dst |
stat(path) | 返回path指定檔案的資訊 |
os.path模組提供與目錄有關的函式
函式 | 說明 |
---|---|
abspath(path) | 用於獲取檔案或目錄的絕對路徑 |
exists(path) | 用於判斷目錄或者檔案是否存在,如果存在則返回True,否則返回False |
join(path,name) | 將目錄與目錄或者檔名拼接起來 |
splitext() | 分離檔名和拓展名 |
split(path) | 將路徑和檔名分開 |
basename(path) | 從一個目錄中提取檔名 |
dirname(path) | 從一個路徑中提取檔案路徑,不包括檔名 |
isdir(path) | 用於判斷路徑是否有效 |
demo —— 獲取當前工作目錄
import os
print(os.getcwd())
demo —— 判斷目錄是否存在
import os
print(os.path.exists("c:\\demo"))
注
因為exists()是os的子模組提供的,所以要要加字首,os.path
demo —— 建立一級目錄
import os
path = "c://demo"
#如果要建立的目錄已經存在,則會丟擲異常,先判斷要建立的目錄是否存在
if not os.path.exists(path):
os.mkdir(path)
else:
print('該目錄已經存在')
注
mkdir(path)建立的目錄是一級目錄,如果傳入的path中最後一級的上級目錄不存在,那麼會丟擲異常。
demo —— 建立多級目錄
import os
os.makedirs("C:\\demo1\\demo2\\...")
demo —— 刪除目錄
import os
path = "C:\\demo1\\demo2"
#判斷要刪除的目錄,如果不存在會丟擲問題
if os.path.exists(path):
os.rmdir("C:\\demo1\\demo2") #刪除的是demo2這個檔案
print("目錄刪除成功!")
else:
print("該目錄不存")
注:
rmdir()函式只能刪除空的目錄,如果不為空就不能刪除,可以一下程式碼刪除不為空的目錄。
import shutil
shutil.rmtree("C:\\demo\\text")
demo —— 遍歷目錄
os.walk()的返回值是一個包含三個元素(dirpath,dirnams,filenames)的元組生成器物件。
dirpath: 是一個字串,表示當前遍歷的路徑
dirnames: 是一個列表,表示的是當前路徑下包含的子目錄
filenames: 也是一個列表,當前目錄下的檔案
os.walk(top,[topdown][,onerror][,followlinks])
'''
top: 用於指定要遍歷的目錄
topdown: 可選引數,用於指定要遍歷的順序,如果為True(預設),表示從上到下遍歷,如果為False,表示從小到上。
'''
import os
path = "C:\\demo"
#root 是當前根路徑,dirs包含路徑下的子目錄,files包含了子目錄下的二五年間
for root,dirs,fles in os.walk(path,topdown=True):
for name in dirs:
print(os.path.join(root,name))
for name in files:
print(os.path.join(root.name))
demo —— 產找當前目錄下某個檔案是否存在
import os
path = "C:\\demo"
filename = "love.txt"
for root,dirs,files in os.walk(path):
for name in files:
if filename== name:
print(os.path.join(root,name))