Python-讀寫文件

python

在寫python 代碼的過程,我發現在讀寫文件的過程中有的時候會出現點問題,所以還是想花點時間總結一下,加深一下自己的印象。

讀文件

python 中可以用 內置的open()函數來打開一個文件。源碼中是這樣定義的

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

一般情況向,只需要考慮前面兩個參數,也就是 file 和 mode,file 代表的是文件路徑,mode指的是打開方式,默認是讀方式打開,具體如下表:

mode annotation
‘r’ 以讀方式打開
‘w’ 以寫方式打開
‘a’ 以追加模式打開
‘x’ 新建一個文件,且以寫方式打開
‘b’ 二進制模式
‘t’ text 模式,也就是打開的結果是 str類型的,默認的
‘+’ (打開磁盤文件更新) 讀寫模式

示例(介紹比較常用的):

  • 以讀方式打開文件
#【英文】
#第一種
file = open('/Users/lionel/Downloads/english.txt')
#第二種
file = open('/Users/lionel/Downloads/english.txt','r')


#【中文】
file = open('/Users/lionel/Downloads/Chinese.txt', 'r')
print(file)#控制檯無顯示,需要以二進制打開,下節會講
  • 以二進制形式打開
#【英文】
# 以二進制讀出,和以讀方式讀出區別在於開始處多一個 b 字符,標示着是二進制
file = open('/Users/lionel/Downloads/english.txt','rb')

#【中文】
file = open('/Users/lionel/Downloads/Chinese.txt','rb')

中文以二進制打開的結果是:

b'\xe6\xa2\x85\xe8\xa5\xbf\xe6\x98\xaf\xe4\xbd\x8d\xe4\xbc\x9f\xe5\xa4\xa7\xe7\x9a\x84\xe8\xb6\xb3\xe7\x90\x83\xe8\xbf\x90\xe5\x8a\xa8\xe5\x91\x98\n'

想要表示爲中文

file.read().decode('utf-8')

結果是:

梅西是位偉大的足球運動員
  • 讀一行文件
    前面調用read()方法可以一次性讀取所有內容,可以使用readline()一行一行地讀取。

file = open('/Users/lionel/Downloads/Chinese.txt','rb'file.readline().decode('utf-8')

注意:

  • 文件打開後,使用 close() 完畢後必須關閉,因爲文件對象會佔用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的。
  • 由於文件讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會調用。所以,爲了保證無論是否出錯都能正確地關閉文件,我們可以使用try … finally來實現。
try:
    file = open('/Users/lionel/Downloads/Chinese.txt','rb')
    print(file.read().decode('utf-8'))
finally:
    if file:
        file.close()
  • 但是每次都這麼寫實在太繁瑣,所以,Python引入了with語句來自動幫我們調用close()方法:
with open('/Users/lionel/Downloads/Chinese.txt', 'rb') as file:
    print(file.read().decode('utf-8'))

寫文件

寫文件其實個讀文件是類似的,唯一的區別在於調用的 python 的內置函數 open()函數,傳入標識符’w’或者’wb’表示寫文本文件或寫二進制文件。然後調用 write ()向文件中寫入內容。當我們寫文件時,操作系統往往不會立刻把數據寫入磁盤,而是放到內存緩存起來,空閒的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁盤。

output = open('output', 'wb')
output.write(text)

由於寫文件和讀文件類似,在這裏面就不詳細介紹了,有興趣的可以自己去了解。同樣記住要執行 close()方法,建議直接使用 with 語句。

參考文件:python文件讀寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章