Python文件操作

在Python中,文件操作使用函數open(文件,模式,編碼方式)


一、文件操作的模式

在Python中,操作文件主要有以下四種模式

1、r:只讀模式

f = open("test.txt", "r")
data = f.read()
print(data)


2、w:只寫模式   要注意的是,在用這種模式打開文件的時候,如果文件不存在,會先創建一個文件;如果文件存在,則會先將裏面的內容清空。

f = open("demo.txt", "w")
f.write("Hello Python!!!")
f.close()


3、x:只寫模式  這種模式跟w模式基本是一樣的,只是如果要操作的文件已經存在,則會報錯。

f = open("demo.txt", "x")
f.write("Hello Python!!!")
f.close()

如上面的代碼所示,在demo.txt文件已經存在的情況下,會出現下面的錯誤。

Traceback (most recent call last):

  File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 7, in <module>

    f = open("demo.txt", "x")

FileExistsError: [Errno 17] File exists: 'demo.txt'


4、a:追加模式  這種模式不能進行讀的操作,只能在在原來內容的基礎上追加內容,如果文件不存在的話,也會先創建文件,然後再進行寫操作。

f = open("demo1.txt", "a")
print(f.tell())
f.write("Hello Python!!!")
f.close()

通過tell()方法可以看出,在文件打開的時候,指針已經移動到了文件的末尾,所以在使用write()寫入內容的時候,都會在文件的末尾追加新的內容。


二、二進制方式讀寫文件

在上面介紹的文件操作中,全都是以文本方式來讀寫文件,也就是寫入的和讀出的都是文本,下面介紹以字節(二進制)的方式讀寫文件

以字節方式讀寫文件,也就是在原來操作模式的基礎上加上字節模式,即:

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'


所以在使用字節方式讀寫文件的時候,應該注意編碼方式和輸出傳入數據的格式。


三、文件操作的相關方法

1、flush()

將暫時保存在內存中的數據寫到硬盤上

2、seek()

將指針移動到指定的位置

3、tell()

顯示當前指針所在的位置

4、readline()

一次只讀取文件中的一行數據

5、truncate()

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章