最近得以空閑,然后繼續學習py。
學習一下py中最頻繁用到的文件讀寫的方法。
在py中,操作是通過文件對象【File obj】實現的,通過文件對象可以讀寫文本文件和一些二進制文件。
1.打開文件
使用Python中的open函數。有8個參數,但是我們常用的就2個足夠了。
# 使用所有參數打開文件
with open('example.txt', mode='r', buffering=1, encoding='utf-8', errors='ignore', newline='\n', closefd=True, opener=None) as f:# 讀取文件內容content = f.read()print(content)
- file參數
如果是字符串,則代表的是文件名字,文件名字可以是相對當前目錄的路徑,也可以是絕對路徑;如果是一個整數,則代表文件描述符,文件描述符指向一個打開的文件。 - mode參數
下面是常用的文件打開模式:
-
只讀模式 (
r
):- 描述:以只讀模式打開文件。文件指針將會放在文件的開頭。如果文件不存在,會拋出
FileNotFoundError
異常。 - 示例:
open('filename.txt', 'r')
- 描述:以只讀模式打開文件。文件指針將會放在文件的開頭。如果文件不存在,會拋出
-
寫入模式 (
w
):- 描述:以寫入模式打開文件。文件指針會放在文件的開頭。如果文件不存在,會創建一個新文件。如果文件存在,會截斷文件(即清空文件內容)。
- 示例:
open('filename.txt', 'w')
-
追加模式 (
a
):- 描述:以追加模式打開文件。文件指針會放在文件的末尾。如果文件不存在,會創建一個新文件。如果文件存在,寫入的數據將會追加到文件的末尾。
- 示例:
open('filename.txt', 'a')
-
讀寫模式 (
r+
):- 描述:以讀寫模式打開文件。文件指針會放在文件的開頭。如果文件不存在,會拋出
FileNotFoundError
異常。 - 示例:
open('filename.txt', 'r+')
- 描述:以讀寫模式打開文件。文件指針會放在文件的開頭。如果文件不存在,會拋出
-
寫入讀模式 (
w+
):- 描述:以寫入讀模式打開文件。文件指針會放在文件的開頭。如果文件不存在,會創建一個新文件。如果文件存在,會截斷文件。
- 示例:
open('filename.txt', 'w+')
-
追加讀模式 (
a+
):- 描述:以追加讀模式打開文件。文件指針會放在文件的末尾。如果文件不存在,會創建一個新文件。如果文件存在,寫入的數據將會追加到文件的末尾。可以進行讀寫操作。
- 示例:
open('filename.txt', 'a+')
-
二進制模式 (
b
):- 描述:以二進制模式打開文件。可以與上述模式組合使用,例如
rb
、wb
、ab
、r+b
等。用于讀取或寫入二進制文件,如圖片、音頻等。 - 示例:
open('filename.bin', 'rb')
- 描述:以二進制模式打開文件。可以與上述模式組合使用,例如
-
文本模式 (
t
):- 描述:以文本模式打開文件。默認模式,可以與上述模式組合使用,例如
rt
、wt
、at
、r+t
等。用于讀取或寫入文本文件。 - 示例:
open('filename.txt', 'rt')
- 描述:以文本模式打開文件。默認模式,可以與上述模式組合使用,例如
示例代碼
以下是一些打開文件的示例代碼:
# 以只讀模式打開文本文件
with open('example.txt', 'r', encoding='utf-8') as f:content = f.read()# 以寫入模式打開文本文件
with open('example.txt', 'w', encoding='utf-8') as f:f.write("Hello, World!")# 以追加模式打開文本文件
with open('example.txt', 'a', encoding='utf-8') as f:f.write("Appending some text.")# 以二進制模式打開文件
with open('example.bin', 'rb') as f:binary_content = f.read()# 以讀寫模式打開文件
with open('example.txt', 'r+', encoding='utf-8') as f:f.write("Read and write.")f.seek(0)content = f.read()
2.關閉文件
當使用了open打開文件之后,要記得寫關閉文件,否則會拋異常。
常規就是調用一次open,然后尾部寫一下close。
但是一般情況下,文件的操作往往會拋出異常,為了保證文件的操作無論正常結束還是異常結束都能夠關閉文件,使用with as 代碼塊來進行自動資源管理。
import unittestclass MyTestCase(unittest.TestCase):def test_something(self):# self.assertEqual(True, False) # add assertion here# print("hello world")fobj = open("test.txt", "w+",encoding="utf-8")fobj.write("hello world")fobj.close()with open("test.txt", "a+",encoding="utf-8") as f:f.write("\n大家好~")if __name__ == '__main__':unittest.main()
這樣子執行的話,就是創建了一個文件,往里面寫入了一句話。
注意
- 文件有編碼的,需要指定
- 用完要關閉