python檔案處理-讀、寫

來源:互聯網
上載者:User

標籤:令行   沒有   傳輸   方式   是的   編碼   迴圈讀取   byte   好的   

  Python中檔案處理的操作包括讀、寫、修改,今天我們一起來先學習下讀和寫操作。

一、檔案的讀操作

  例一:

#檔案讀操作f = open(file="first_blog.txt",mode = ‘r‘,encoding=‘gbk‘)#‘r’表示唯讀模式(開啟仍然為檔案),encoding = ‘gbk‘表示原檔案的儲存格式為‘gbk‘,開啟時必須告訴程式將gbk轉成unicode(python3編碼預設Unicode)data = f.read()  # 讀取所有內容,內容是已經轉換完畢的字串print(data)  # 列印到螢幕f.close()#檔案開啟後必須關閉

‘‘‘
輸出:
write by congcong

Hello world!

這是我用python開啟的第一個檔案。

‘‘‘

  例二:

#檔案二進位讀模式f = open(file="first_blog.txt",mode = ‘rb‘)#‘rb’表示以二進位讀模式(硬碟存為存的二進位開啟就為二進位,並且不再需要指定編碼)data = f.read()print(data)f.close()‘‘‘輸出:    b‘write by congcong\r\n\r\nHello world!\r\n\r\n\xd5\xe2\xca\xc7\xce\xd2\xd3\xc3python\xb4\xf2\xbf\xaa\xb5\xc4\xb5\xda\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xa1\xa3\r\n\r\n‘    ‘‘‘

  大家能看出例一和例二的區別嗎?

  區別在於例二直接以rb模式開啟了檔案 ,rb是指二進位模式,資料讀到記憶體裡直接是bytes格式,

如果想要看內容,還需要手動decode,因此在檔案開啟階段,不需要指定編碼。

  那如果我們不知道一個檔案是以什麼編碼儲存的怎麼辦呢?

  方式一:嘗試使用各種編碼方式,總有一款是的,的確可以,不過感覺傻傻的,有沒有更好的方法呢?

  方法二:匯入一個叫 chardet 的外部工具(首先你要連網安裝,Python3安裝方法命令列輸入:pip3 install chardet)

import chardetres = chardet.detect(open(‘first_blog.txt‘,mode=‘rb‘).read())print(res)‘‘‘輸出:{‘encoding‘: ‘GB2312‘, ‘confidence‘: 0.99, ‘language‘: ‘Chinese‘}     # confidence 表示可信程度
‘‘‘

  例三(迴圈讀取):

# -*- coding:utf-8 -*-f = open("for_line.txt",mode = ‘r‘,encoding=‘gbk‘)for line in f:  #按行讀取    print(line)f.close()‘‘‘輸出:    鍵盤字母排序如下:    qwertyuiop    asdfghjkl    zxcvbnm‘‘‘#中間有空行的原因:print本身有換行的特點

  注意:   

  • 檔案操作時,以 “r”或“rb” 模式開啟,則只能讀,無法寫入;
  • 硬碟上儲存的檔案都是某種編碼的0101010,開啟時需要注意:
    • rb,直接讀取檔案儲存時原生的0101010,在Python中用位元組類型表示
    • r和encoding,讀取硬碟的0101010,並按照encoding指定的編碼格式進行斷句,再將“斷句”後的每一段0101010轉換成unicode的 010101010101,在Python中用字串類型表示

二、檔案的寫操作

  寫操作裡可以分為覆蓋寫檔案(‘w’和‘wb’)和追加寫檔案(‘a’和‘ab’)兩大類。

  1、覆蓋寫檔案

    樣本如下:  

# -*- coding:utf-8 -*-#特別注意當mode的模式為‘w’時,是建立新檔案,當檔案名稱與原檔案相同時,原檔案被清空重寫f = open("write.txt",mode = ‘w‘,encoding=‘gbk‘) #普通檔案的寫f.write(‘這是第一個我用Python寫的檔案!‘) # 自動將寫的Unicode字串轉為gbk編碼的二進位串。f.close()f2 = open("write2.txt",mode = ‘wb‘) #以二進位寫檔案,主要用於視頻圖片等檔案的傳輸f2.write("這是用二進位寫的第一個檔案!".encode(‘gbk‘))# 二進位寫必須要加encode(),將寫的unicode進行編碼成指定格式的二進位儲存,Python3預設是utf-8
f2.close()  

  注意:

    檔案覆蓋寫操作時,以 “w”或“wb” 模式開啟,則只能寫,並且在開啟的同時會先將內容清空。

    寫入到硬碟上時,必須是某種編碼的0101010,開啟時需要注意:

    •   wb,寫入時需要直接傳入以某種編碼的0100101,即:位元組類型,二進位寫必須加encode()將寫的Unicode
    •   w 和 encoding,寫入時需要傳入unicode字串,內部會根據encoding制定的編碼將unicode字串轉換為該編碼的 010101010  

2、追加寫檔案

    樣本如下:

#特別注意當mode的模式為‘a’時,是檔案追加模式,就是接著寫檔案f3 = open(‘write.txt‘,mode=‘a‘,encoding=‘gbk‘)f3.write(‘\n這是追加的文本1!‘)  # 自動將寫的Unicode字串轉為gbk編碼的二進位串。

f3.write(‘\n這是追加的文本2!‘)
f3.write(‘\n這是追加的文本3!‘)
f3.close()

f4 = open(‘write3.txt‘,mode = ‘ab‘)#以二進位追加檔案,主要用於視頻圖片等檔案的傳輸
f4.write(‘\n這是用二進位追加的檔案!‘.encode(‘gbk‘)) # 二進位追加寫也必須要加encode(),將寫的unicode進行編碼成指定格式的二進位儲存,Python3預設是utf-8
f4.close()

  檔案追加寫操作時,以 “a”或“ab” 模式開啟,則只能追加,即:在原來內容的尾部追加內容

  寫入到硬碟上時,必須是某種編碼的0101010,開啟時需要注意:

    •   ab,寫入時需要直接傳入以某種編碼的0100101,即:位元組類型,二進位追加寫必須加encode()將寫的unicode字串轉為指定編碼的二進位串,不指定時Python3預設utf-8。
    •   a 和 encoding,寫入時需要傳入unicode字串,內部會根據encoding制定的編碼將unicode字串轉換為該編碼的 010101010

 三、檔案的讀寫(r+)和寫讀(w+)混合模式 

  1、檔案的讀寫(r+)

    樣本如下:

#-*-coding:utf-8-*-f = open(file=‘write.txt‘,mode=‘r+‘,encoding=‘gbk‘) # r+ 表示讀寫入模式print(‘讀寫前:\n‘,f.read())f.write(‘這是讀寫入模式下的內容\n‘)f.write(‘這是讀寫入模式下的內容\n‘)print(‘讀寫後:\n‘,f.read())f.close()‘‘‘讀寫前: 這是第一個我用Python寫的檔案!這是追加的文本1!這是追加的文本2!這是追加的文本3!讀寫後:‘‘‘

 注意:讀寫入模式下只能查看之前已存在的內容,而寫入的內容無法再讀出來(與游標的移動有關,下一篇會細說),開啟檔案查看,寫入的內容已經追加到了之前寫的最後面。

  2、檔案的寫讀(‘w+’,使用非常少,瞭解即可)

    樣本如下:

# -*-coding:utf-8-*-f = open(file=‘write.txt‘,mode=‘w+‘,encoding=‘gbk‘)print(‘寫讀前:\n‘,f.read())f.write(‘這是寫讀模式下的內容\n‘)f.write(‘這是寫讀模式下的內容\n‘)print(‘寫讀後:\n‘,f.read())f.close()‘‘‘寫讀前: 寫讀後:‘‘‘

 注意: 檔案的寫讀模式會先清空原先檔案裡存在的內容,再寫入你即將要寫的內容,相當於覆蓋寫,不同在於可以查看寫入的內容,

需要移動檔案中游標位置。下一篇的檔案常用操作方法中會細品。

  

    

 

  

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.