Python文件操做

在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()

保留當前指針以前的數據,刪除指針所在位置以後的數據

相關文章
相關標籤/搜索