本文給大家介紹Python文件處理相關知識,具體內容如下所示:
1.文件的常見操作
文件是日常編程中常用的操作,通常用于存儲數(shù)據(jù)或應用系統(tǒng)的參數(shù)。python提供了os、os.path、shutil等模塊處理文件,其中包括最常用的打開文件,讀寫文件,賦值文件和刪除文件等函數(shù)。
1.1文件的創(chuàng)建
python3.+中移除了python2中的全局file()函數(shù),還保留了open()函數(shù)。文件的打開或創(chuàng)建可以使用函數(shù)open()。該函數(shù)可以指定處理模式,設置打開的文件為只讀,只寫,可讀寫狀態(tài)。open()的聲明如下:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
參數(shù)說明:
•參數(shù)file是被打開的文件名稱,如果文件file不存在,open()將創(chuàng)建名為name的文件,然后再打開該文件。
•參數(shù)mode是指文件的打開模式。文件的打開模式請參照以下內容。
•參數(shù)buffering是設置緩存模式。0表示不緩存,1表示緩存;如果大于1則表示緩沖區(qū)的大小,以字節(jié)為單位。
•參數(shù)encoding是設置文件的字符編碼格式。
•open()函數(shù)會返回一個file對象,file 對象可以對文件進行各種操作 文件模式:
'r' open for reading (default)'w' open for writing, truncating the file first'x' create a new file and open it for writing
創(chuàng)建一個新的文件,打開并寫入
'a' open for writing, appending to the end of the file if it exists
模式打開文件以追加
'b' binary mode二進制模式打開,可與其他模式一起使用't' text mode (default)'+' open a disk file for updating (reading and writing)'U' universal newline mode (deprecated)支持所有的換行符號
注意:圖片、視頻等文件必須使用b的模式進行讀寫。
message = '''hello world,/nhello python,/ngood time.'''f = open('test.txt','w')f.write(message)f.close() 代碼說明:
•定義一個字符串變量
•以只寫模式創(chuàng)建一個文件并寫入
•將字符串變量寫入文件
•關閉文件
1.2 文件的讀取
文件的讀取有多種方法,可以使用readline()、readlines()、或read()函數(shù)讀取文件。
1.按行讀取方式readline()
readline()每次讀取文件的一行,需要循環(huán)讀取文件。但是當文件指針移動到文件的末尾是,依然使用readline()讀取文件將出現(xiàn)錯誤。因此程序中需要添加一個判斷語句,判斷時間指針是否在文件的尾部,并且通過該語句中斷循環(huán)。示例如下:
# 使用readline模式讀取文件f = open('test.txt','r')while True:line = f.readline()if line:print(line)else:breakf.close()#如果line = f.readline(2)則表示每次循環(huán)只讀取兩字節(jié)的內容,直到行的末尾 2.多行讀取方式readlines()
# 多行讀取文件f = open('test.txt')lines = f.readlines()for line in lines:print(line)f.close() 3.一次性讀取方式read()
讀取文件最簡單的方式就是使用read(),read()將文件中一次性讀出所有內容,并賦值給字符串變量,但是當文件比較大的時候不建議使用read()的方式去讀取文件,因為一次讀取比較大的內容會消耗大量的內存,影響系統(tǒng)的性能。示例如下:
# 一次讀取文件f = open('test.txt','r')lines = f.read()print(lines)f.close() 文件指針:
with open('test.txt','rb') as src:rd = src.read(100)print(rd)print(src.seek(src.tell()))rd = src.read(100)print(rd)print(src.seek(src.tell()))#每次讀取100字節(jié),然后返回指針的位置 4.with函數(shù)
通常我們使用open()打開一個文件并賦值給一個字符串變量來對文件進行操作,最后還需要進行手動關閉文件,這樣寫起來有點麻煩,下面我們可以使用with函數(shù)將文件打開與關閉寫在一行函數(shù)上。
with open('test.txt','r') as src:da = src.read()print(da)#只讀模式打開文件并賦值給src,然后對文件進行操作即可,代碼與使用open()來操作文件相同。 1.3文件的寫入
文件的寫入有多種方法,可以使用write(),也可以使用writelines()方法寫入文件。write()可以將字符串寫入文件,writelines()可以將列表寫入文件。示例如下:
m1 = 'hello world'l1 = ['good','time']f = open('test1.txt','w')f.write(m1)f.writelines(l1)f.close() 文件的追加:
m1 = 'hello python'f = open('test1.txt','a+')f.write(m1)f.close() 1.4文件的刪除
文件的刪除需要使用os模塊和os.path模塊,os模塊提供了系統(tǒng)的環(huán)境、文件、目錄等操作系統(tǒng)的函數(shù)。 對于文件來說比較常用的os模塊的函數(shù)如下:
•os.access(path,mode)#按照mode指定的權限進行訪問
•os.chmod(path,mode)#改變文件的訪問權限,mode用UNIX的權限符號表示
•os.open(filename,flag[,mode=0777])#按照mode指定的權限打開文件。默認情況下,給所有用戶讀、寫、執(zhí)行的權限
•os.remove(path)#刪除path指定的文件
•os.rename(old,new)#重命名文件或目錄,old表示原文件或目錄,new表示新文件或目錄
•os.stat(path)#返回path指定文件的所有屬性
•os.fstat(path)#返回打開文件的所有屬性
•os.startfile(filepath[,operation])#啟動關聯(lián)程序打開文件。例如,打開一個html文件,將啟動IE瀏覽器
•os.tmpfile()#創(chuàng)建一個臨時文件,文件創(chuàng)建在操作系統(tǒng)的臨時目錄中
注意:os模塊的open()函數(shù)與內建的open()函數(shù)的用法不同。
os.path模塊常用的函數(shù)如下:
•os.path.abspath(path)#返回path所在的絕對路徑
•os.path.dirpath(path)#返回目錄的路徑
•os.path.exists(path)#判斷文件是否存在
•os.path.getatime(filename)#返回文件的最后訪問時間
•os.path.getctime(filename)#返回文件的創(chuàng)建時間
•os.path.getmtime(filename)#返回文件最后的修改時間
•os.path.getsize(filename)#返回文件的大小
os.path判斷函數(shù)
•os.path.isabs(s)#測試路徑是否是絕對路徑
•os.path.isdir(path)#判斷path指定的是否是目錄
•os.path.isfile(path)#判斷path指定的是否是文件
•os.path.split(p)#對路徑進行分割,并以列表的方式返回
•os.path.splitext(p)#從路徑中分割文件的擴展名
•os.path.splitdrive(p)#從路徑中分割驅動器的名稱
•os.walk(top,func,arg)#遍歷目錄樹
示例如下:
import osif os.path.exists('../test.txt'):os.remove('test.txt')print('is del')else:print('no') 1.5文件的復制
文件的復制有多種方法,下面我們來看一下第一種比較low的方式,就是讀寫的方式進行文件復制。示例如下:
#使用read()、write()實現(xiàn)文件復制f1 = open('1.txt','r')f2 = open('2.txt','w')f2.write(f1.read())f2.close()f1.close() 第二種方法:
shutil模塊,shutil模塊是另外一個文件、目錄的管理接口,提供了一些用于復制、目錄的函數(shù)。copyfile()函數(shù)可以實現(xiàn)文件的復制,copyfile()函數(shù)的聲明如下:
shuil.copyfile(src,dst)
•src表示源文件的路徑,src是字符串類型
•dst表示目標文件的路徑,dst是字符串類型
•src指向的文件復制到dst指向的文件
示例如下:
import shutilshutil.move('1.txt','2.txt') 1.6文件的重命名
os模塊的函數(shù)rename()可以對文件或目錄進行重命名。
import osos.rename('1.txt','11.txt') 使用shutil中的move()函數(shù)也可以實現(xiàn)文件重命名的目的。
import shutilshutil.move('11.txt','1.txt') 修改文件的后綴名:
import osfiles = os.listdir('.')for filename in files:li = os.path.splitext(filename)#返回后文件名和后綴名的列表if li[1] == '.html':newname = li[0] + '.htm'os.rename(filename,newname) glob模塊用于對路徑的匹配,返回符合給定條件的文件列表。glob模塊的主要函數(shù)就是glob(),該函數(shù)返回符合同一匹配條件的多個文件。上面的呈現(xiàn)需要判斷是否為html后綴,也可以使用glob()函數(shù)直接匹配文件名稱。 匹配代碼如下:
glob.glob('*.html') glob還可以對路徑做更對的匹配。例如,匹配C盤中以w開頭的目錄中所有的文本文件。
glob.glob('C:///w*//*//txt') 1.7文件的搜索和替換
文件內容的搜索和替換可以使用字符串的查找和替換來實現(xiàn)。例如,在htllo.txt文件中查找字符串'hello',并統(tǒng)計'hello'出現(xiàn)的次數(shù)。代碼如下:
python, equal to anything!
以上內容給大家介紹了Python文件處理相關知識,希望對大家有所幫助!



















