欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python基本文件操作實用指南

 更新時間:2022年06月08日 15:49:46   作者:ζ小菜雞  
文件操作是我們開發(fā)中必不可少的一項需求,下面這篇文章主要給大家介紹了關(guān)于Python基本文件操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

一、前言

在Python中,內(nèi)置了文件(File)對象。在使用文件對象時,首先需要通過內(nèi)置的open()方法創(chuàng)建一個文件對象,然后通過該對象提供的方法進行一些基本文件操作。例如,可以使用文件對象的write()方法向文件中寫入內(nèi)容,以及使用close()方法關(guān)閉文件等。下面將介紹如何應(yīng)用Python的文件對象進行基本文件操作。

二、創(chuàng)建和打開文件

在Python中,想要操作文件需要先創(chuàng)建或者打開指定的文件并創(chuàng)建文件對象。這可以通過內(nèi)置的open()函數(shù)實現(xiàn)。open()函數(shù)的基本語法格式如下:

file = open(filename[,mode[,buffering]])

參數(shù)說明:

  • file:被創(chuàng)建的文件對象
  • filename:要創(chuàng)建或打開文件的文件名稱,需要使用單引號或雙引號括起來。如果要打開的文件和當(dāng)前文件在同一個目錄下,那么直接寫文件名即可,否則需要指定完整路徑。例如,要打開當(dāng)前路徑下的名稱為status.txt的文件,可以使用“status.txt”。
  • mode:可選參數(shù),用于指定文件的打開模式。其參數(shù)值如下面所示。默認(rèn)打開模式為只讀(即r)
說明
r以只讀方式打開文件。文件的指針將會放在文件的開頭。
rb以二進制格式打開文件,并采取只讀模式。文件的指針將會放在文件的開頭。一般用于非文本文件,如照片、音樂等。
r+打開文件后,可以讀取文件內(nèi)容,也可以寫入新的內(nèi)容覆蓋原有內(nèi)容(從文件開頭進行覆蓋)
rb+以二進制格式打開文件,并采取寫模式。文件的指針將會放在文件的開頭。一般用于非文本文件,如圖片、聲音等。
w以只寫模式打開文件
wb以二進制格式打開文件,并且采用只寫模式。一般用于非文本文件,如圖片、聲音等
w+打開文件后,先清空原有內(nèi)容,使其變?yōu)橐粋€空的文件,對這個空文件有讀寫權(quán)限
wb+以二進制格式打開文件,并且采用讀寫模式。一般用于非文本文件,如圖片、聲音等
a以追加模式打開一個文件。如果該文件已經(jīng)存在,文件指針將放在文件的末尾(即新內(nèi)容會被寫入到已有內(nèi)容之后),否則,創(chuàng)建新文件用于寫入
ab以二進制格式打開一個文件,并采用追加模式。如果該文件已存在,文件指針將會放在文件的結(jié)尾(即新內(nèi)容會被寫入到已有內(nèi)容之后),否則,創(chuàng)建新文件用于寫入
a+已讀寫模式打開文件。如果該文件已經(jīng)存在,文件指針將放在文件的末尾(即新內(nèi)容會被寫入到已有內(nèi)容之后),否則,創(chuàng)建新文件用于寫入
ab+以二進制格式打開一個文件,并采用追加模式。如果該文件已經(jīng)存在,文件指針將會放在文件的結(jié)尾(即新內(nèi)容會被寫入到已有內(nèi)容之后),否則,創(chuàng)建新文件用于寫入

1.打開一個不存在的文件時先創(chuàng)建該文件

在默認(rèn)的情況下,使用open()函數(shù)打開一個不存在的文件,會拋出如圖所示的異常。

在這里插入圖片述

要解決上圖所示的錯誤,主要有以下兩種方法:

  • 在當(dāng)前目錄下(即與執(zhí)行的文件相同的目錄)創(chuàng)建一個名稱為 status.txt 的文件。
  • 在調(diào)用open()函數(shù)時,指定mode的參數(shù)值為w、w+、a、a+。這樣,當(dāng)要打開的文件不存在時,就可以創(chuàng)建新的文件了。

2.以二進制形式打開文件

使用open()函數(shù)不僅可以文本的形式打開文本文件,而且可以以二進制形式打開非文本文件,如圖片、音頻文件等。例如,創(chuàng)建一個名稱為picture.jpg的圖片文件(如圖所示),并且應(yīng)用open()函數(shù)以二進制方式打開該文件。

以二進制方式打開該文件,并輸出創(chuàng)建的對象對的代碼如下:

file = open("picture.jpg", "rb")
print(file)

執(zhí)行上面代碼,將顯示如圖所示的結(jié)果:

從上圖中可看出,創(chuàng)建的是一個BufferedReader對象。對于該對象生成后,可以再應(yīng)用其他的第三方模塊進行處理。例如,上面的BufferedReader對象是通過打開圖片文件實現(xiàn)的。那么就可以將其傳入到第三期的圖像處理庫PIL的Image模塊的open()方法中,以便于對圖像進行處理(如調(diào)整大小等)

3.打開文件時指定編碼方式

在使用open()函數(shù)打開文件時,默認(rèn)采用GBK編碼,當(dāng)被打開的文件不是GBK編碼時,將拋出異常,如圖所示:

解決該問題的方法有兩種,一種直接修改文件的編碼,另外一種是在打開文件時,直接指定使用的編碼方式。推薦采用后一種方法。下面重點介紹如何在打開文件時指定編碼方式。

在調(diào)用open()函數(shù)時,通過添加“encoding=‘utf-8’”參數(shù)即可實現(xiàn)編碼指定為UTF-8。如果想指定其他編碼可以將單引號中的內(nèi)容替換為想要指定的編碼即可。

例如,打開采用UTF-8編碼保存的notice.txt文件,可以使用下面的代碼:

file = open("notice.txt", "r", encoding='utf-8')

三、關(guān)閉文件

打開文件后,需要及時關(guān)閉,以免對文件造成不必要的破壞。關(guān)閉文件可以使用文件對象close()方法實現(xiàn)。close()方法的語法格式如下:

file.close()    # 關(guān)閉文件

說明: close()方法先刷新緩沖區(qū)中還沒寫入的信息,然后再關(guān)閉文件,這樣可以將沒有寫入到文件的內(nèi)容寫入到文件中。在關(guān)閉文件后,便不能再進行寫入操作了。

四、打開文件時使用with語句

打開文件后,要及時將其關(guān)閉,如果忘記關(guān)閉可能會帶來意想不到的問題。另外如果在打開文件時拋出異常,那么將導(dǎo)致文件不能及時關(guān)閉。為了更好地避免此類事情的發(fā)生,可以使用Python提供with語句。從而實現(xiàn)在處理文件時,無論是否拋出異常,都能保障with語句執(zhí)行完畢后關(guān)閉已經(jīng)打開的文件。with語句的基本語法格式如下:

with expression as target:
	with-body

參數(shù)說明:

expression :用于指定一個表達式,這里可以是打開文件的函數(shù)open()。
target:用于指定一個變量,并且將expression 的結(jié)果保存到這個變量中。
with-body:用于指定with語句體,其中可以是執(zhí)行with語句相關(guān)聯(lián)的一些操作語句。如果不想執(zhí)行語句,可以直接使用pass語句來代替。

例如打開文件的語句,修改后的代碼如下:

print("\n", "=" * 10, "Python經(jīng)典應(yīng)用", "=" * 10)
with open("massage.txt", "w") as file:  # 創(chuàng)建或打開保存Python經(jīng)典應(yīng)用信息的文件
    pass
print("\n 即將顯示……\n")

五、寫入文件內(nèi)容

在前面的內(nèi)容中,雖然創(chuàng)建并打開了一個文件,但是該文件中并沒有任何內(nèi)容,它的大小是0kb。Python中的文件對象提供了write()方法,可以像文件中寫入內(nèi)容。write()方法的語法格式如下:

file.write(string)

參數(shù)說明:

  • file:打開的文件對象
  • string:要寫入的字符串

注意: 在調(diào)用write()方法向文件寫入內(nèi)容的前提是,打開文件時,指定的打開模式為w(可寫)或者a(追加),否則,將拋出如圖所示的異常:

六、讀取文件

在Python中打開文件后,除了可以向其寫入或追加內(nèi)容,還可以讀取文件中的內(nèi)容。讀取文件內(nèi)容主要分為以下幾種情況。

1.讀取指定字符

文件對象提供了read()方法讀取指定個數(shù)的字符,其語法格式如下:

file.read([size])

參數(shù)說明:

  • file:打開的文件對象
  • size:可選參數(shù),用于指定要讀取的字符個數(shù),如果省略則一次性讀取所有內(nèi)容。

注意: 在調(diào)用read()方法讀取文件內(nèi)容的前提是,打開文件時,指定的模式為r(只讀)或者r+(讀寫),否則,將拋出如圖所示的異常。

例如,讀取massage.txt中的前9字符串,可以使用下列代碼:

with open("massage.txt", "r", encoding='utf-8') as file:  # 打開文件
    string = file.read(9)  # 讀取前9字符串
    print(string)

例如,massage.txt文件的內(nèi)容為:

Python的強度,強度到你無法想象?。?!

那么執(zhí)行以上代碼,將顯示以下內(nèi)容:

使用read([size])方法讀取文件時,是從文件的開頭讀取部分內(nèi)容,可以先使用文件對象的seek()方法將文件的指針移動到新的位置,然后在應(yīng)用read([size])方法讀取,seek()方法基本語法如下:

file.seek(offset[,whence])

參數(shù)說明:

  • file:表示已經(jīng)打開的文件對象。
  • offset:用于指定移動的字符個數(shù),其具體位置與whence有關(guān)。
  • whence:用于指定從什么位置開始計算。值為0表示從文件頭開始計算,值為1表示從當(dāng)前位置計算,值為2表示從文件尾開始計算,默認(rèn)為0。

注意: 對于 whence參數(shù),如果在打開文件時,沒有使用b模式(即rb),那么只允許從文件頭開始計算相對位置,從文件尾計算時就會引發(fā)如圖所示的異常:

例如,想要從文件的第6個字符開始讀取2個字符,可以使用下列代碼:

with open("message.txt", "r") as file:  # 打開文件
    file.seek(5)              # 移動指針到新的位置
    string = file.read(2)	# 讀取2個字符
    print(string)

如果message.txt文件中內(nèi)容為:

123456789

那么執(zhí)行上面代碼,將顯示以下結(jié)果:

說明: 在使用seek()方法時,offset的值是按照一個漢字占兩個字符、英文和數(shù)字點占一個字符計算的,這個與read(size)方法不同。

2.讀取一行

在使用read()方法讀取文件時,如果文件很大,一次讀取完全部內(nèi)容到內(nèi)存,容易造成年內(nèi)存不足,所以采取逐行讀取。文件對象提供了readline()方法用于每次讀取一行數(shù)據(jù)。readline()方法的語法格式如下:

file.readline()

其中,file為打開的文件對象,同read()方法一樣,打開文件時,指定的模式為r(只讀)或者r+(讀寫)。

print("\n", "=" * 20, "Python經(jīng)典應(yīng)用", "=" * 20)
with open("message.txt", "r", encoding="utf-8") as file:  
    number = 0  # 記錄行號
    while True:
        number += 1
        line = file.readline()
        if line == "":
            break
        print(number, line, end="\n")
print("\n ", "=" * 20, "over" * 20, "\n")

如果message.txt文件中內(nèi)容為下圖所示:

執(zhí)行上面代碼,將顯示以下內(nèi)容:

3.讀取全部行

讀取全部行的作用同調(diào)用read()方法時不指定size類似,只不過讀取全部行時,返回的是一個字符串列表,每個元素為文件的一行內(nèi)容。讀取全部行,使用的是文件對象的readlines()方法,其語法格式如下:

file.readlines()

其中,file為打開的文件對象,同read()方法一樣,打開文件時,指定的模式為r(只讀)或者r+(讀寫)。

例如,通過readlines()方法讀取message.txt文件中所有內(nèi)容,并輸出讀取內(nèi)容結(jié)果,代碼如下:

print("\n", "=" * 20, "Python經(jīng)典應(yīng)用", "=" * 20)
with open("message.txt", "r", encoding="utf-8") as file:
    message = file.readlines()  # 讀取全部信息
    print(message)
    print("\n ", "=" * 20, "over", "=" * 20, "\n")

執(zhí)行上面代碼,將顯示以下內(nèi)容:

從該運行結(jié)果中可以看出readlines()方法的返回值為一個字符串列表。在這個字符串列表中,每個元素為一行內(nèi)容。如果文件較大時,采用這種方法輸出讀取的文件內(nèi)容會很慢。這時可以將列表的內(nèi)容逐行輸出,例如,代碼可以修改為以下內(nèi)容:

print("\n", "=" * 20, "Python經(jīng)典應(yīng)用", "=" * 20)
with open("message.txt", "r", encoding="utf-8") as file:
    messageall = file.readlines()  # 讀取全部信息
    for message in messageall:
        print(message)  # 輸出一條信息
print("\n ", "=" * 20, "over", "=" * 20, "\n")

執(zhí)行上面代碼,將顯示以下內(nèi)容:

總結(jié) 

到此這篇關(guān)于Python基本文件操作實用指南的文章就介紹到這了,更多相關(guān)Python文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論