在Python中,文件操做使用函數open(文件,模式,編碼方式)
python
1、文件操做的模式ide
在Python中,操做文件主要有如下四種模式函數
一、r:只讀模式ui
f = open("test.txt", "r") data = f.read() print(data)
二、w:只寫模式 要注意的是,在用這種模式打開文件的時候,若是文件不存在,會先建立一個文件;若是文件存在,則會先將裏面的內容清空。編碼
f = open("demo.txt", "w") f.write("Hello Python!!!") f.close()
三、x:只寫模式 這種模式跟w模式基本是同樣的,只是若是要操做的文件已經存在,則會報錯。指針
f = open("demo.txt", "x") f.write("Hello Python!!!") f.close()
如上面的代碼所示,在demo.txt文件已經存在的狀況下,會出現下面的錯誤。內存
Traceback (most recent call last):utf-8
File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 7, in <module>it
f = open("demo.txt", "x")ast
FileExistsError: [Errno 17] File exists: 'demo.txt'
四、a:追加模式 這種模式不能進行讀的操做,只能在在原來內容的基礎上追加內容,若是文件不存在的話,也會先建立文件,而後再進行寫操做。
f = open("demo1.txt", "a") print(f.tell()) f.write("Hello Python!!!") f.close()
經過tell()方法能夠看出,在文件打開的時候,指針已經移動到了文件的末尾,因此在使用write()寫入內容的時候,都會在文件的末尾追加新的內容。
2、二進制方式讀寫文件
在上面介紹的文件操做中,全都是以文本方式來讀寫文件,也就是寫入的和讀出的都是文本,下面介紹以字節(二進制)的方式讀寫文件
以字節方式讀寫文件,也就是在原來操做模式的基礎上加上字節模式,即:
rb,wb,xb,ab
先介紹一下以普通方式讀寫文件的流程
f = open("test.txt", "r", encoding="utf-8")
數據在磁盤上以二進制的方式存儲,當咱們以r的方式讀取文件的時候,Python內部先將文件的二進制數據讀取出來,而後以咱們制定的編碼方式,將二進制數據轉換成文本數據。
在寫入的時候也是同樣
f = open("demo1.txt", "w", encoding="utf-8") f.write("Hello Python!!!")
咱們傳入的都是文本數據,Python先根據編碼方式,將文本數據轉換成二進制數據,而後存儲到磁盤
*可能在平時咱們讀寫的時候都不會制定編碼方式,這是由於Python內部默認的編碼方式就是UTF-8
因此當咱們經過字節方式讀寫文件的時候,Python讀取病返回給咱們的就直接是二進制數據,一樣,在寫入的時候,咱們也應該傳給Python字節數據。
字節方式讀取文件
f = open("demo.txt", "rb") data = f.read() print(type(data), data) data = str(data, encoding="utf-8") print(type(data), data)
上面代碼輸出的結果是:
<class 'bytes'> b'Hello Python!!!'
<class 'str'> Hello Python!!!
從打印結果能夠看出,直接經過rb方式讀取出來的是字節格式的數據,能夠經過str()方法將其轉換成字符數據。
須要注意的一點是:在以字節方式讀取文件的時候,不能加上編碼方式,不然將會報錯
f = open("demo.txt", "rb", encoding="utf-8") data = f.read() print(type(data), data)
Traceback (most recent call last):
File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 16, in <module>
f = open("demo.txt", "rb", encoding="utf-8")
ValueError: binary mode doesn't take an encoding argument
執行代碼將會出現上面的錯誤,這是由於經過字節方式讀取數據的時候,已經不須要Python幫咱們將二進制數據轉換成字符數據了。
字節方式寫入文件
f = open("demo.txt", "wb") f.write(bytes("Hello World!!!", encoding="utf-8")) f.close()
經過字節方式寫入文件的時候,傳給Python的必須是字節數據,不然就會報錯,以下代碼所示
f = open("demo.txt", "wb") f.write("Hello World!!!") f.close()
Traceback (most recent call last):
File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 23, in <module>
f.write("Hello World!!!")
TypeError: a bytes-like object is required, not 'str'
因此在使用字節方式讀寫文件的時候,應該注意編碼方式和輸出傳入數據的格式。
3、文件操做的相關方法
一、flush()
將暫時保存在內存中的數據寫到硬盤上
二、seek()
將指針移動到指定的位置
三、tell()
顯示當前指針所在的位置
四、readline()
一次只讀取文件中的一行數據
五、truncate()
保留當前指針以前的數據,刪除指針所在位置以後的數據