1. 程式人生 > 實用技巧 >python檔案及目錄操作

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))