本文介紹python語言中的對於檔案的讀寫等操作。(本文使用python3)
首先是對檔案的操作流程為:
1.開啟檔案,得到檔案控制代碼並賦值給乙個變數
2.通過控制代碼對檔案進行操作
3.關閉檔案
對於檔案的操作就離不開open()函式(這個函式是python的io模組中的乙個內建函式)。
首先建議使用help(open)檢視下這個函式的基本資訊(很多),部分結果如下:
可以看到這個函式的作用是開啟乙個檔案並且返回乙個資料流。在執行失敗時會觸發ioerror。
基本用法如上所示,file是必須給出的,如果檔案在當前工作目錄,可以直接給出檔名即可;如果檔案不在當前工作目錄,還需要給出檔案的路徑。
開啟模式(mode):
「r」為預設模式:唯讀模式,不能進行寫等操作。
『w』:只寫模式,此時會進行「截斷」操作,如果檔案不存在則會建立,如果存在會覆蓋掉原檔案內容。
『x』:類似於『w』模式,不同的是在建立檔案的時候會檢查原檔案是否存在,如果存在會引發乙個fileexistserror錯誤。
『a』:追加模式,檔案不存在則建立,如果存在則在末尾追加內容。
『b』:二進位制模式,處理二進位制檔案。
『t』:檔案模式(預設)。
『+』:開啟乙個位於磁碟上的檔案,並且可以對這個檔案進行讀寫操作。
以上模式可以進行組合使用,例如『rb』即為讀二進位制檔案。
例如可以使用語句file1 = open(『data』)開啟檔案,這時候只是獲得了這個檔案的控制代碼,並沒有進行任何操作。
如果想列印檔案內容可以利用print
(file1.
read
())。
讀寫方法:f為檔案控制代碼(或賦給的那個變數名)
檔案的
f.read([size]) #size為讀取的長度,以byte為單位 。
f.readline([size]) #讀一行,如果定義了size,有可能返回的只是一行的一部分 。
f.readlines([size]) #把檔案每一行作為乙個list的乙個成員,並返回這個list。其實它的內部是通過迴圈呼叫readline()來實現的。
如果提供size引數,size是表示讀取內容的總長,也就是說可能唯讀到檔案的一部分。
f.write(str) #把str寫到檔案中,write()並不會在str後加上乙個換行符 。
f.writelines(seq) #把seq的內容全部寫到檔案中。這個函式也只是忠實地寫入,不會在每行後面加上任何東西。
f.close() #關閉檔案。如果乙個檔案在關閉後還對其進行操作會產生valueerror 。
f.flush() #把緩衝區的內容寫入硬碟 ,重新整理。
f.fileno() #返回乙個長整型的」檔案標籤「 。
f.isatty() #檔案是否是乙個終端裝置檔案(unix系統中的)。
f.tell() #返回檔案操作標記的當前位置,以檔案的開頭為原點 。返回值為距離原點的字元數。
f.next() #返回下一行,並將檔案操作標記位移到下一行。檔案是乙個可迭代物件。
下面舉一些具體檔案操作的例子:
1. 是開啟乙個檔案並列印出來
# author:allen liu
# data: 07/27/2017
#11111開啟檔案並列印的三種方法。
file1 = open('data')#等價於 file1 = open('data','r'),獲得了檔案控制代碼
print(file1.read())#可以在括號中指定讀取的位元組數,用於將檔案內容放到乙個字串變數中。
file1.close()
#file2 = open('data','r')
for line in file2:
print(line.strip('\n'))
file2.close()
#file3 = open('data','r')
lines = file3.readlines()
for line in lines:
print(line.strip('\n'))
file3.close()
為什麼每次都要用open()重新獲得檔案控制代碼呢?因為對乙個檔案進行操作後,游標就不在原點了,這時候就不能得到游標前面的內容。
2. 向乙個已經存在的檔案中追加內容
hello world!i'm comming!
file1 = open('data','a+')
file1.write('i will be back!')
print(file1.read())
#這裡是無法列印出檔案內容的,因為是追加,游標已經在文件的結束位置。
file1.close()
還有就是追加的內容追加在原文件的最後一行。如果想在下一行記得在追加內容前面加\n。
3. 建立乙個原來沒有的檔案,並寫入內容。
file1 = open('data1','x')
file1.write('i will be back!')
最好用『x』模式,因為直接用『w』的話,可能會覆蓋掉原有檔案的內容,用『x』則會先進行檢查。
4. 在原有檔案的指定位置寫入內容。
file1 = open('data','r+')
#file1.tell()檢視游標當前位置
file1.seek(10)#設定游標位置(以字元計算)
file1.write('i will be back!')
file1.close()
上邊的方法雖然可以在指定位置寫入內容,但是會覆蓋掉後面的內容。不推薦使用。
在不改變檔案內容的基礎上的新增,作者會在後續文章中介紹。
python之讀寫檔案
fr open readfile.txt r fw open writefile.txt w print fr.readline print fr.tell print fr.readlines fw.write write line fw.close fr.seek 0,0 第乙個引數代表位元組數...
python之檔案讀寫
python檔案讀寫 檔案讀取 data open baotuquan r encoding utf 8 read print data 輸出前10行,第九行修改 for line in f count 0if count 9 print fen count 1continue print line...
python之讀寫檔案
1.讀取檔案資料,檔案必須存在才可以讀且如要讀取的檔案不和當前.py在同乙個包下,需要特別指定此檔案路徑才行 f open test.txt encoding utf 8 填寫檔案路徑,開啟檔案 res f.read 讀取檔案 print res 顯示f.close 2.寫入後讀取 寫入資料 fw ...