學習參考博客地址:
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!')