Day01自學 - Python 文件I/O

學習參考博客地址:
Python 文件I/O) | Python學習(九)IO 編程 —— 文件讀寫) | 廖雪峰Python教程 - 文件讀寫

一、打開和關閉文件

1. open函數

先用Python內置的open()函數打開一個文件,創建一個file對象,相關的方法才可以調用它進行讀寫。

file object = open(file_name [, access_mode] [, buffering])

參數細節

  • file_name: file_name變量是一個包含了你要訪問的文件名稱的字符串值
  • access_mode: access_mode決定了打開文件模式:只讀、讀寫、追加等。該參數是非強制的,默認文件訪問模式為只讀(r)
  • buffering: 如果buffering的值被設為0,就不會有寄存。如果buffering的值取1,訪問文件時會寄存行。如果將buffering的值設為大于1的整數,表明了這就是寄存器的緩沖大小。如取負值,寄存器的緩沖大小則為系統默認。

不同模式打開文件的完全列表

模式 描述
r 以只讀方式打開文件,文件的指針將會放在文件的開頭。(默認模式)
rb 以二進制格式打開一個文件用于只讀,文件的指針將會放在文件的開頭。(默認模式)
r+ 打開一個文件用于讀寫,文件的指針將會放在文件的開頭。
rb+ 以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。
w 打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb 以二進制格式打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
w+ 打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb+ 以二進制格式打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
a 打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
ab 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
a+ 打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用于讀寫。
ab+ 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用于讀寫。

2. File對象的屬性

一個文件被打開后,你就有一個file對象,可以得到有關該文件的各種信息。

文件對象屬性 描述
file.closed 表示文件已經被關閉,否則為False
file.mode Access文件打開時使用的訪問模式
file.encoding 文件所使用的編碼
file.name 文件名
file.newlines 未讀取到行分隔符時為None,只有一種行分隔符時為一個字符串,當文件有多種類型的行結束符時,則為一個包含所有當前所遇到的行結束的列表
file.softspace 為0表示在輸出一數據后,要加上一個空格符,1表示不加。這個屬性一般程序員用不著,由程序內部使用

例如:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

filename = open("file_ex1.txt", "wb")    # 打開一個文件
print("file name:", filename.name)
print("closed or not:", filename.closed)
print("access mode:", filename.mode)

3. 關閉文件

因為文件對象會占用操作系統的資源,并且操作系統同一時間能打開的文件數量也是有限的。所以文件使用完畢后必須關閉,

  • 調用close()方法關閉文件
>>> f.close()
  • 由于文件讀寫時都有可能產生IOError,一旦出錯,后面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try ... finally來實現:
try:
    f = open('filename', 'r')
    print(f.read())
finally:
    if f:
        f.close()
  • 但是每次都這么寫實在太繁瑣,所以,Python引入了with語句來自動幫我們調用close()方法:
# 讀取文件
with open('filename', 'r') as f:
    print(f.read())
# 寫入文件
with open('filename', 'w') as f:
    f.write('Hello, world!')

二、讀取和寫入文件

讀寫文件是最常見的IO操作。Python內置了讀寫文件的函數,用法和C是兼容的。
讀寫文件前,我們先必須了解一下,在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤,所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然后,通過操作系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。

標識符部分可見上文

1. 讀取文件

read():一次性讀取文件的全部內容
read(size):每次最多讀取size個字節的內容(可以反復調用)
readline() :每次讀取一行內容
readlines():一次讀取所有內容并按行返回

# 讀取文件
with open('filename', 'r') as f:
    print(f.read())

2. 寫入文件

write()

# 寫入文件
with open('filename', 'w') as f:
    f.write('Hello, world!')
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容