python全棧學習總結四:檔案操作

來源:互聯網
上載者:User

標籤: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全棧學習總結四:檔案操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.