標籤:lines 存在 linux系統 換行 報錯 readlines data div 結束
一 檔案操作步驟
1 開啟檔案,得到檔案的控制代碼並賦值
2 通過控制代碼對檔案進行操作
3 關閉檔案
檔案操作的實質是:讀取檔案到記憶體中,可以在記憶體中查看、修改、複製等操作,若是對檔案進行了重新修改刪除等操作,則是重新寫入硬碟中,並不是在原硬碟檔案上操作!
二 檔案操作執行個體
1 讀取檔案
f = open(‘test‘,‘r‘,encoding=‘utf-8‘)#data = f.read() #讀取檔案所有的內容# print(f.readable()) #查詢檔案是否可以讀取# print("第一行",f.readline().rstrip(‘\n‘)) #讀取檔案一行,去除最後一行的換行標誌# print("第二行",f.readline().rstrip(‘\n‘)) #檔案一次讀取一行,沒讀一次,游標會記錄讀取的位置# print("第三行",f.readline().rstrip(‘\n‘))# print("第四行",f.readline().rstrip(‘\n‘))# print("第五行",f.readline().rstrip(‘\n‘))# print("第六行",f.readline().rstrip(‘\n‘))#檔案已經讀完,游標移動最後,所以讀不出內容# print("第七行",f.readline().rstrip(‘\n‘))print(f.readlines())#讀取檔案所有的內容,包含斷行符號鍵也讀出了f.close()
如上:檔案讀取操作主要有以上函數readable():查詢檔案是否可以讀取 readline():讀取檔案一行,以換行標誌結束 readlines()讀取所有的記憶體,包含換行,存放在一個列表中。 read()預設讀取所有的字元,若是帶參數如read(10)表示讀取10個字元
2 寫檔案操作
f = open(‘測試‘,‘w‘,encoding=‘utf-8‘)print(f.writable())f.write(‘騎驢追車‘) #寫的內容必須是字串f.writelines([‘1111111\n‘,‘222222\n‘,‘揚帆起航‘])f.close()
如上:write()操作是向檔案寫入字串,寫的必須是字串,writeable()查詢檔案是否可寫,writelines()寫入的內容是列表,列表中記憶體是字串元素
3 追加模式操作
# f = open("測試",‘a‘,encoding=‘utf-8‘)# f.write(‘\n測試追加‘)# f.close()f = open("test",‘r+‘,encoding=‘utf-8‘) #開啟檔案,可以寫f.write(‘\n測試讀寫‘) #寫的時候 是從游標位置開始寫,第一次開啟,預設從第一行開始寫f.close()
如上:a表示在源檔案基礎上進行寫操作。
另外除了‘r‘,‘w‘,‘a‘模式外還有‘x’模式,x模式與w模式不同之處主要有x是寫操作源檔案不存在,則報錯,而w不存在則建立,若存在源檔案內容都清空。
‘r+’模式是以讀的方式開啟,可以進行寫操作
‘w+’模式是寫寫的方式開啟,可以進行讀操作
‘a+’模式是以追加的模式開啟,可以進行讀操作
‘b’模式是表示以二進位的形式進行讀寫,如‘rb‘,‘rb+’,‘wb‘,‘wb+‘等操作,預設操作是以文本的形式操作。
winddow系統主要有文本和二進位(位元組)的形式操作,底層的實質是把文本字串轉換為二進位,而linux系統均是以二進位形式操作
二進位操作不用指定編碼
f = open(‘測試‘,‘rb‘)
4 二進位操作
# f = open(‘二進位測試‘,‘wb‘)# f.write(‘二進位測試讀寫操作\n‘.encode(‘utf-8‘)) #通過字串方法encode進行編碼操作,寫入到文本中# f.write(bytes(‘位元組轉換形式操作‘,encoding=‘utf-8‘))#通過字串操作函數bytes操作,以utf-8編碼寫入到文本中,進行文本操作# f.close()f = open(‘二進位測試‘,‘rb‘)data = f.read()print(data.decode(‘utf-8‘)) #讀出的資料為二進位編碼,通過方法decode進行解碼操作,列印出字串f.close()
二進位操作方式中不能指定編碼,同時注意window系統中斷行符號換行為\r\n,linux系統中為\n
文本字串-----》encode-------->二進位編碼
二進位編碼-----》decode-------->文本字串
進行二進位編碼的方式有:
‘字串’.encode(‘utf-8‘)
bytes(‘字串‘,encoding=‘utf-8‘)
對二進位進行解碼的方式有:
‘二進位編碼’.decode(‘utf-8‘)
5 檔案其他動作函數總結
read(3)代表讀取3個字元,其餘的檔案內游標移動都是以位元組為單位的如seek,tell,read,truncate操作
f.flush()#把檔案內容從記憶體刷到硬碟中,起到即時儲存的作用。
f.closed#檔案如果關閉,則返回True
f.encoding#查看使用open開啟檔案的編碼格式,注意並不是檔案的實際編碼格式
f.tell #查看檔案處理當前的游標位置
f.seek(3)#從頭開始運算,將游標移動到第三個位元組
f.truncate(10)#從頭開始運算,將檔案只保留從0-10個位元組的內容,檔案必須是以寫的方式開啟,但是‘w‘和‘w+’除外。
6 seek方法的進階應用程式
seek共有2個參數,第一個參數為游標個數,第二個參數預設為0,預設為0時,游標個數是從頭開始計數的。
當第二個參數為1時,則游標相對從從上一次的位置操作開始。
當第二個參數為2時,則游標倒著開始計數,例如f.seek(-5,2)表示從尾向前數5個字元開始讀取
例,讀取動作記錄的最後一行。
with open(‘日誌‘,‘rb‘) as f: for i in f: #讀取檔案時,推薦一行一行的讀取,節省記憶體 offset = -10 while True: f.seek(offset,2) #從尾開始插入游標 data = f.readlines() #讀出來是一個列表 if len(data) > 1: print(data[-1].decode(‘utf-8‘)) break offset *= 2
python全棧學習總結四:檔案操作