国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 程序設(shè)計入門(024)—— Python 的文件操作

這篇具有很好參考價值的文章主要介紹了Python 程序設(shè)計入門(024)—— Python 的文件操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Python 程序設(shè)計入門(024)—— Python 的文件操作

為了能夠長期保存程序中的數(shù)據(jù),需要將其保存到磁盤文件中。Python 提供了內(nèi)置的文件對象和對文件、目錄進行操作的內(nèi)置模塊。

一、文件對象

Python 中內(nèi)置了文件(file)對象,使用文件對象時,需要先通過內(nèi)置的 open() 函數(shù)創(chuàng)建一個文件對象,然后通過該對象提供的方法進行操作。

使用 open() 函數(shù)一定要保證關(guān)閉文件對象,即調(diào)用 close() 函數(shù)。open() 函數(shù)的語法格式如下:

file = open(filename, mode = "r", buffering = -1, encoding = None)

說明:

(1)filename:要創(chuàng)建或打開的文件名(必須),使用單引號或雙引號括起來。如果要打開的文件和當前文件在同一目錄下,可以不帶路徑,否則需要指定完整路徑。

(2)mode:指定文件的打開模式(可選),默認的打開模式為只讀(r),mode 的取值如下表所示:

取值 含義 說明
t 文本模式(默認)
r 以只讀模式打開文件。文件的指針將會放在文件的開頭。 文件必須存在
rb 以二進制格式打開文件,并且采用只讀模式。文件的指針將會放在文件的開頭。 文件必須存在
r+ 打開文件后,可以讀取文件內(nèi)容,也可以寫入新的內(nèi)容覆蓋原有內(nèi)容(不清空原文件,從第一個字符開始逐步替換)。
比如文件中原有內(nèi)容為:123456789,寫入abc,則文件內(nèi)容為:abc456789
文件必須存在
rb+ 以二進制格式打開文件,并且采用讀寫模式,文件的指針將會放在文件的開頭。 文件必須存在
w 以只寫模式打開文件 如果文件已存在,則將其覆蓋,否則創(chuàng)建新文件
wb 以二進制格式打開文件,并且采用只寫模式。一般用于非文本文件,如圖片、聲音等。 如果文件已存在,則將其覆蓋,否則創(chuàng)建新文件
w+ 打開文件后,先清空原有內(nèi)容,使其變?yōu)橐粋€空文件,對這個空文件有讀寫權(quán)限。 如果文件已存在,則將其覆蓋,否則創(chuàng)建新文件
wb+ 以二進制格式打開文件,并且采用讀寫模式。一般用于非文本文件,如圖片、聲音等。 如果文件已存在,則將其覆蓋,否則創(chuàng)建新文件
a 以追加模式打開文件。如果該文件已存在,文件指針放在文件的末尾(新內(nèi)容會被寫到已有內(nèi)容之后)。否則,創(chuàng)建新文件用于寫入。 如果文件已存在,則將新內(nèi)容追加到原文件結(jié)尾,否則創(chuàng)建新文件并寫入新內(nèi)容
ab 以二進制格式打開文件,并且采用追加模式。如果該文件已存在,文件指針將放在文件末尾(新內(nèi)容會被寫到已有內(nèi)容之后)。否則,創(chuàng)建新文件用于寫入。 如果文件已存在,則將新內(nèi)容追加到原文件結(jié)尾,否則創(chuàng)建新文件并寫入新內(nèi)容
a+ 以讀寫模式打開文件。如果該文件已存在,文件指針將放到文件的末尾(新內(nèi)容會被寫到已有內(nèi)容之后)。否則,創(chuàng)建新文件用于讀寫。 如果文件已存在,則將新內(nèi)容追加到原文件結(jié)尾,否則創(chuàng)建新文件并寫入新內(nèi)容
ab+ 以二進制格式打開文件,并且采用追加模式。如果該文件已存在,文件指針將放到文件末尾(新內(nèi)容會被寫到已有內(nèi)容之后)。否則,創(chuàng)建新文件用于讀寫。 如果文件已存在,則將新內(nèi)容追加到原文件結(jié)尾,否則創(chuàng)建新文件并寫入新內(nèi)容

mode 參數(shù)的用法如下:

常用的 mode 取值組合如下:
(1)r 或 rt:默認模式,文本模式、只讀模式
(2)rb:二進制模式
(3)w 或 wt:文本模式、只寫模式,打開之前文件被清空
(4)wb:二進制模式、寫模式,打開之前文件被清空
(5)a:追加模式,只能寫在文件末尾
(6)a+:可讀寫模式,寫操作只能寫在文件末尾
(7)w+:可讀寫模式,與 a+ 的區(qū)別就是寫之前先清空文件內(nèi)容
(8)r+:可讀寫模式,寫之前先清空文件內(nèi)容

說明:
(1)r(只讀模式)、w(只寫模式)、a(追加模式)為打開文件的基本模式。
(2)b(二進制模式)、t(文本模式)、+(讀寫模式) 與以上三個模式可以混合使用。
(3)r、rb、r+,rb+ 模式要求文件必須存在。r 與 rb 表示只讀模式。r+ 與 rb+ 表示可讀寫,寫入的新內(nèi)容會替換文件中的原有內(nèi)容。
(4)w、wb、w+、wb+ 模式下,如果文件已創(chuàng)建,則覆蓋原文件,如果文件不存在,則創(chuàng)建新文件。w 與 wb 表示只能寫入,不能讀取。w+ 與 wb+ 表示可讀寫,但寫入的內(nèi)容會替換文件中的原有內(nèi)容。
(5)a、ab、a+、ab+ 模式下,如果文件已創(chuàng)建,則將新內(nèi)容追加到原文件的結(jié)尾,如果文件不存在,則創(chuàng)建新文件并寫入新內(nèi)容。a 和 ab 表示以追加模式打開文件,無法讀取文件內(nèi)容。a+ 和 ab+ 表示以讀寫方式打開文件。

(3)buffering:用于指定讀寫文件的緩沖模式(可選),取值為 0 時表示不緩存;取值為 1 時表示緩存;如果取值大于 1,則表示緩沖區(qū)的大小。如果取負值,緩沖區(qū)的大小則為系統(tǒng)默認。默認值為 -1。

(4)encoding:編碼方式。Windows 系統(tǒng)默認是 gbk 編碼,所以桌面生成的 TXT 之類的文件都是gbk 編碼的。

例如:

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
print(file1.read())
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415

二、讀取文件內(nèi)容的方法

讀取文件內(nèi)容通常使用 file 對象的 3 個方法:(1)使用 read() 方法讀取全部或部分內(nèi)容;(2)使用 readline() 方法逐行讀取文件內(nèi)容;(3)使用 readlines() 方法讀取所有內(nèi)容。

也可以使用 for 循環(huán)讀取文件內(nèi)容。

1、read() 方法

read() 方法用于讀取文件的全部或部分內(nèi)容。read() 方法的語法格式如下:

file.read([size]) 

說明:

(1)size 為可選參數(shù),用于指定要讀取文件內(nèi)容的字符數(shù)(所有字符 size 均為 1,包括漢字)。如果省略,則返回文件的所有內(nèi)容。

(2)使用 read() 方法讀取文件內(nèi)容時,如果文件大于可用內(nèi)存,則不能實現(xiàn)對文件的讀取,返回空字符串。

例如:

(1)讀取文件的全部內(nèi)容

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
print(file1.read())
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415

(2)讀取 25 個字符

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
print(file1.read(25))
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,
2、readline() 方法

readline() 方法用于每次讀取一行數(shù)據(jù)。readline() 方法的語法格式如下:

file.readline() 

例如:

(1)讀取一行數(shù)據(jù)

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
print(file1.readline())
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號

(2)讀取 5 行數(shù)據(jù)

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
for i in range(5):
    print(file1.readline(),end="")
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654

(3)讀取全部數(shù)據(jù)

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
while True:
    line = file1.readline()
    if line == "":
        break
    print(line,end="")
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415
3、readlines() 方法

readlines() 方法返回一個列表,列表中每個元素為文件中的行數(shù)據(jù)。readlines() 方法的語法格式如下:

file.readlines()

例如:

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
list1 = file1.readlines()
print("類型",type(list1))
print("列表長度:",len(list1))
print("列表內(nèi)容如下:")
print(list1)
print("遍歷列表內(nèi)容:")
for item in list1:
    print(item,end="")
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
類型 <class 'list'>
列表長度: 13
列表內(nèi)容如下:
['姓名,性別,出生日期,院系,班級,手機號\n', '張平,女,2002-12-5,經(jīng)濟與管理學院,信管201班,13603735216\n', '劉濤,男,2002-10-15,經(jīng)濟與管理學院,信管201班,13603733334\n', '張靜靜,女,2003-8-6,經(jīng)濟與管理學院,信管212班,13603734243\n', '王強,男,2003-6-25,經(jīng)濟與管理學院,信管212班,13603736654\n', '張海洋,男,2002-7-9,機電學院,機制211班,13603737778\n', '劉思雨,女,2001-8-30,機電學院,機制211班,13603736538\n', '王彥強,男,2002-7-31,機電學院,機制212班,13603736528\n', '劉朝輝,男,2001-7-6,機電學院,機制201班,13603736235\n', '王鵬,男,2002-9-27,機電學院,機制201班,13603734215\n', '劉燕燕,女,2001-8-22,文法學院,法學201班,13603733685\n', '王蕓,女,2002-6-30,文法學院,法學201班,13603733322\n', '劉云飛,男,2002-9-21,文法學院,法學201班,13603733415']
遍歷列表內(nèi)容:
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415
4、使用 for 循環(huán)讀取文件內(nèi)容

使用 for 循環(huán)讀取文件內(nèi)容格式如下:

file1 = open(filename, mode)
for line in file:
    print(line)

或:
file1 = open(filename, mode)
for line in file.readlines():
    print(line)

例如:

import os
if os.path.exists("d:\\stu.txt"):
    with open("d:\\stu.txt", mode = "r", encoding = 'utf-8') as file1:
        for line in file1:
            print(line,end="")
else:
    print("要打開的文件不存在!")
    
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415

或者:

import os
if os.path.exists("d:\\stu.txt"):
    with open("d:\\stu.txt", mode = "r", encoding = 'utf-8') as file1:
        for line in file1.readlines():
            print(line,end="")
else:
    print("要打開的文件不存在!")
        
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415

三、文件指針的操作

除了文件讀取操作,有時還需要進行獲取或移動指針位置的操作。

1、tell() 方法

tell() 方法返回一個整數(shù),表示文件指針的當前位置,即在二進制模式下距離文件頭的字節(jié)數(shù)。tell() 方法的語法格式如下:

file.tell()
說明:使用 tell() 方法返回的位置與 read() 中 size 參數(shù)不同。read() 方法中的 size 參數(shù)為字符數(shù),tell() 方法返回的是字節(jié)數(shù)。漢字所占的字節(jié)數(shù)和字符編碼有關(guān),如果采用 GBK 編碼,一個漢字占 2 個字節(jié),如果采用 UTF-8 編碼,一個漢字占 3 個字節(jié)。

修改放表稱為單鏈表。

file1 = open("d:\stu.txt",mode = "r",encoding='utf-8')
file1.readlines()
print("readlines()方法把指針移動到文件結(jié)尾:",file1.tell())
file1.seek(0)  # 把指針移動到文件頭
file1.readline()
print("readline()方法把指針移動到下一行的開頭:",file1.tell())
file1.seek(0)  # 把指針移動到文件頭
file1.read(25)
print("read(25)方法把指針移動到第25個字符:",file1.tell())
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
readlines()方法把指針移動到文件結(jié)尾: 825
readline()方法把指針移動到下一行的開頭: 52
read(25)方法把指針移動到第25個字符: 62
2、seek() 方法

seek() 方法用于將文件的指針移動到新的位置,位置通過字節(jié)數(shù)指定。這里的數(shù)值與 tell() 方法返回的數(shù)值計算方法一致。seek() 方法的語法格式如下:

file.seek(offset [,whence])
說明:
(1)offset:用于指定移動的字節(jié)數(shù)。具體位置與 whence 參數(shù)有關(guān)。
(2)whence:指定從什么位置開始計算。值為 0 表示從文件頭開始計算(默認),為 1 表示從當前位置開始計算,為 2 表示從文件尾開始計算。默認值為 0。

例如:

file1 = open("d:\stu.txt",mode = "rb")
file1.seek(0)  # 把指針移動到文件頭
print(file1.tell())

file1.seek(10)  # 把指針移動到離文件頭10個字節(jié)的位置
print(file1.tell())

file1.seek(20,1)  # 再向后移動20個自節(jié)
print(file1.tell())

file1.seek(0,2)  # 把指針移動到文件尾
print(file1.tell())

file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
0
10
30
825

四、文件的寫入操作

利用文件對象的 write() 方法,可以向文件中寫入內(nèi)容。write() 方法的語法格式如下:

file.write(string)

對于一個文件來說,能不能寫入數(shù)據(jù)、數(shù)據(jù)的寫入方式與打開文件的模式有關(guān)。

(1)如果一個文件以只讀方式(r)打開,則無法寫入

代碼如下:

file1 = open("d:\stu.txt",mode = "r")
file1.write("新增一條記錄:")
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
Traceback (most recent call last):
  File "C:\Python\Python38\First.py", line 2, in <module>
    file1.write("新增一條記錄:")
io.UnsupportedOperation: not writable

(2)如果一個文件以只寫方式打開,則無法讀取內(nèi)容

代碼如下:

file1 = open("d:\stu.txt",mode = "w")
file1.readlines()
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
Traceback (most recent call last):
  File "C:\Python\Python38\First.py", line 2, in <module>
    file1.readlines()
io.UnsupportedOperation: not readable

(3)文件以只寫方式打開,寫入內(nèi)容

代碼如下:

file1 = open("d:\\test123.txt", mode = "w")
file1.write("Hello Python!")
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
>>> 

(4)文件以可讀寫(r+)方式打開,寫入內(nèi)容

代碼如下:

file1 = open("d:\\test123.txt", mode = "r")
print(file1.read())
print(file1.tell())
file1.close()

file1 = open("d:\\test123.txt", mode = "r+")
file1.write("New!")
print(file1.tell())
file1.close()

file1 = open("d:\\test123.txt", mode = "r")
print(file1.read())
print(file1.tell())
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
Hello Python!
13
4
New!o Python!    # r+ 模式在寫入時,并不清空文件,而是從第一個字符開始替換原有的內(nèi)容
13

(5)文件以可讀寫(w+)方式打開,寫入內(nèi)容

代碼如下:

file1 = open("d:\\test123.txt", mode = "r")
print(file1.read())
print(file1.tell())
file1.close()

file1 = open("d:\\test123.txt", mode = "w+")
file1.write("New!")
print(file1.tell())
file1.close()

file1 = open("d:\\test123.txt", mode = "r")
print(file1.read())
print(file1.tell())
file1.close()

程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
Hello Python!
13
4
New!    # w+ 模式在寫入時,先清空原有文件,再寫入新內(nèi)容
4

(6)文件以追加方式打開,寫入內(nèi)容

代碼如下:

file1 = open("d:\\test123.txt", mode = "r")
print(file1.read())
print(file1.tell())
file1.close()

file1 = open("d:\\test123.txt", mode = "a")
file1.write("New!")
print(file1.tell())
file1.close()

file1 = open("d:\\test123.txt", mode = "r")
print(file1.read())
print(file1.tell())
file1.close()

程序運行結(jié)果如下:
>>> 
===================== RESTART: C:\Python\Python38\First.py =====================
Hello Python!
13
17
Hello Python!New!
17

五、使用 with 語句處理文件

文件使用完要及時關(guān)閉。如果忘記關(guān)閉文件,可能出現(xiàn)一些意想不到的結(jié)果。另外,如果在打開文件時出現(xiàn)了異常,將導致文件不能被及時關(guān)閉。為了避免這些問題的產(chǎn)生,可以使用 with 語句實現(xiàn)在處理文件時,無論是否拋出異常,都能保證 with 語句執(zhí)行完后關(guān)閉已經(jīng)打開的文件。

with 語句的語法格式如下:

with expression as target:
    with-body

說明:

(1)expression:指定一個表達式,可以是打開文件的 open() 函數(shù)。

(2)with-body:指定 with 語句體,其中可以是執(zhí)行 with 語句后相關(guān)的一些操作。如果不想執(zhí)行任何操作,可以用 pass 語句代替。

例如:

with open("d:\\stu.txt", mode = "r" ,encoding = "utf-8") as file1:
    while True:
        line = file1.readline()
        if line == "":
            break
        print(line,end="")
        
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415

六、打開文件之前先判斷文件是否存在

使用 open() 函數(shù)打開文件時,如果要打開的文件不存在,則會出現(xiàn)異常??梢允褂?os.path 模塊提供的 exists() 函數(shù)判斷文件是否存在。

例如:

(1)以只讀(r)方式打開一個不存在的文件時出現(xiàn)異常

代碼如下:

with open("d:\\stu001.txt", mode = "r" ,encoding = "utf-8") as file1:
    while True:
        line = file1.readline()
        if line == "":
            break
        print(line,end="")
                
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
Traceback (most recent call last):
  File "C:\Python\Python38\First.py", line 1, in <module>
    with open("d:\\stu001.txt", mode = "r" ,encoding = "utf-8") as file1:
FileNotFoundError: [Errno 2] No such file or directory: 'd:\\stu001.txt'

(2)打開之前先判斷文件是否存在

代碼如下:

import os
if os.path.exists("d:\\stu001.txt"):
    with open("d:\\stu001.txt", mode = "r" ,encoding = "utf-8") as file1:
        while True:
            line = file1.readline()
            if line == "":
                break
            print(line,end="")
else:
    print("要打開的文件不存在!")
                    
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
要打開的文件不存在!

七、文件的編碼問題

由于文件保存格式不同,在讀取文件時如果格式不正確,將會出現(xiàn)亂碼或拋出異常。

例如:

import os
if os.path.exists("d:\\stu.txt"):
    with open("d:\\stu.txt", mode = "r") as file1:
        while True:
            line = file1.readline()
            if line == "":
                break
            print(line,end="")
else:
    print("要打開的文件不存在!")
                        
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
Traceback (most recent call last):
  File "C:\Python\Python38\First.py", line 5, in <module>
    line = file1.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 36: illegal multibyte sequence

可以使用如下三種方法解決文件的編碼格式問題:

1、打開文件時指定文件的編碼格式

例如,在打開文件時,指定編碼格式為 【utf-8】,代碼如下:

import os
if os.path.exists("d:\\stu.txt"):
    with open("d:\\stu.txt", mode = "r", encoding = "utf-8") as file1:
        while True:
            line = file1.readline()
            if line == "":
                break
            print(line,end="")
else:
    print("要打開的文件不存在!")
                            
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415
2、以二進制方式打開文件,然后對讀取的內(nèi)容進行編碼

讀取文件時如果出現(xiàn)字符編碼錯誤,用二進制方式打開文件就不會出現(xiàn)錯誤了,但需要在讀取文件時進行編碼。先使用 isinstance() 函數(shù)判斷讀取的內(nèi)容是否為 str 類型,如果是,則直接讀取文件內(nèi)容。如果不是,則使用異常處理程序嘗試使用 utf-8 方式解碼,否則使用 GBK 解碼。

代碼如下:

import os
if os.path.exists("d:\\stu.txt"):
    with open("d:\\stu.txt", mode = "rb") as file1:
        for line in file1.readlines():
            if isinstance(line,str):
                print(new,end="")
            else:
                try:
                    new = line.decode("utf-8")
                    print(new,end="")
                except:
                    try:
                        new = line.decode("GBK")
                        print(new,end="")
                    except:
                        pass
else:
    print("要打開的文件不存在!")
                                
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415
3、強制以某種模式讀取文件,忽略編碼錯誤

例如:以二進制方式讀取文件的內(nèi)容,然后用 GBK 編碼強制讀取該文件。

代碼如下:

import os
if os.path.exists("d:\\stu.txt"):
    with open("d:\\stu.txt", mode = "rb") as file1:
        text = file1.read()
        new = text.decode("GBK",errors = "ignore")
        print(new)
else:
    print("要打開的文件不存在!")
                                    
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
濮撳悕,鎬у埆,鍑虹敓鏃ユ湡,闄㈢郴,鐝綰,鎵嬫満鍙
寮犲鉤,,2002-12-5,緇忔祹涓庣$悊瀛﹂櫌,淇$201,13603735216
鍒樻稕,,2002-10-15,緇忔祹涓庣$悊瀛﹂櫌,淇$201,13603733334
寮犻潤闈,,2003-8-6,緇忔祹涓庣$悊瀛﹂櫌,淇$212,13603734243
鐜嬪己,,2003-6-25,緇忔祹涓庣$悊瀛﹂櫌,淇$212,13603736654
寮犳搗媧,,2002-7-9,鏈虹數(shù)瀛﹂櫌,鏈哄埗211,13603737778
鍒樻濋洦,,2001-8-30,鏈虹數(shù)瀛﹂櫌,鏈哄埗211,13603736538
鐜嬪濺寮,,2002-7-31,鏈虹數(shù)瀛﹂櫌,鏈哄埗212,13603736528
鍒樻湞杈,,2001-7-6,鏈虹數(shù)瀛﹂櫌,鏈哄埗201,13603736235
鐜嬮箯,,2002-9-27,鏈虹數(shù)瀛﹂櫌,鏈哄埗201,13603734215
鍒樼嚂鐕,,2001-8-22,鏂囨硶瀛﹂櫌,娉曞201,13603733685
鐜嬭姼,,2002-6-30,鏂囨硶瀛﹂櫌,娉曞201,13603733322
鍒樹簯椋,,2002-9-21,鏂囨硶瀛﹂櫌,娉曞201,13603733415

以二進制方式讀取文件的內(nèi)容,然后用 utf-8 編碼強制讀取該文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-730981.html

import os
if os.path.exists("d:\\stu.txt"):
    with open("d:\\stu.txt", mode = "rb") as file1:
        text = file1.read()
        new = text.decode("utf-8",errors = "ignore")
        print(new)
else:
    print("要打開的文件不存在!")
                                        
程序運行結(jié)果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
姓名,性別,出生日期,院系,班級,手機號
張平,,2002-12-5,經(jīng)濟與管理學院,信管201,13603735216
劉濤,,2002-10-15,經(jīng)濟與管理學院,信管201,13603733334
張靜靜,,2003-8-6,經(jīng)濟與管理學院,信管212,13603734243
王強,,2003-6-25,經(jīng)濟與管理學院,信管212,13603736654
張海洋,,2002-7-9,機電學院,機制211,13603737778
劉思雨,,2001-8-30,機電學院,機制211,13603736538
王彥強,,2002-7-31,機電學院,機制212,13603736528
劉朝輝,,2001-7-6,機電學院,機制201,13603736235
王鵬,,2002-9-27,機電學院,機制201,13603734215
劉燕燕,,2001-8-22,文法學院,法學201,13603733685
王蕓,,2002-6-30,文法學院,法學201,13603733322
劉云飛,,2002-9-21,文法學院,法學201,13603733415

到了這里,關(guān)于Python 程序設(shè)計入門(024)—— Python 的文件操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python 程序設(shè)計入門(023)—— Python 的自定義函數(shù)

    在 Python 中,函數(shù)的應用非常廣泛。比如:input()、print()、str()、range()、len() 等,這些稱為 Python 的內(nèi)置函數(shù),可以直接使用。Python 支持自定義函數(shù),即將一段有規(guī)律的、可重復使用的代碼定義為函數(shù),達到一次編寫,多次使用的目的。 自定義函數(shù)使用 def 實現(xiàn),語法格

    2024年02月12日
    瀏覽(21)
  • 【Python 程序設(shè)計】包和數(shù)據(jù)人員入門【01/8】

    ????????一個堅實的Python項目的基礎(chǔ)是掌握模塊,包和導入。 以下文章是有關(guān) Python 數(shù)據(jù)工程系列文章的一部分,旨在幫助數(shù)據(jù)工程師、數(shù)據(jù)科學家、數(shù)據(jù)分析師、機器學習工程師或其他剛接觸 Python 的人掌握基礎(chǔ)知識。 ????????迄今為止,本初學者指南包括: 第 1 部

    2024年02月09日
    瀏覽(19)
  • Python 程序設(shè)計入門(018)—— format() 函數(shù)的用法詳解

    format() 函數(shù)可以對數(shù)據(jù)進行格式化處理,將值轉(zhuǎn)換為由 format_spec 控制的【格式化】表示形式。format() 函數(shù)的語法格式如下: 說明: (1)value:要轉(zhuǎn)換的數(shù)據(jù)。 (2)format_spec:格式化解釋,取決于值參數(shù)的類型; (3)默認情況下,format_spec 是一個空字符串,通常與調(diào)用 st

    2024年02月03日
    瀏覽(26)
  • Linux程序設(shè)計:文件操作

    系統(tǒng)調(diào)用 write read 重定向,輸入重定向,管道功能 open close lseek ? SEEK_SET: offset is an absolute position ? SEEK_CUR: offset is relative to the current position ? SEEK_END: offset is relative to the end of the file fstat, stat, and lstat dup fopen (庫函數(shù)) ? “r” or “rb”: Open for reading only ? “w” or “wb”

    2024年02月05日
    瀏覽(14)
  • 05應用程序設(shè)計和文件操作

    05應用程序設(shè)計和文件操作

    比如: 在qt中,如果想要使用菜單欄功能,那么界面的基類要選擇QMainWindow,不能選擇QWidget QDialog 實現(xiàn)菜單欄步驟如下: 第一步:在UI設(shè)計師,直接雙擊菜單欄 第二步:在UI設(shè)計師,修改文本內(nèi)容和其他設(shè)置 進行設(shè)置 設(shè)置的效果圖如下: 給菜單選項,增加圖片資源 讓用戶比

    2024年02月12日
    瀏覽(20)
  • 成都理工大學_Python程序設(shè)計_Python程序設(shè)計期末模擬試題

    成都理工大學_Python程序設(shè)計_Python程序設(shè)計期末模擬試題

    ?下列變量名中,哪一項不符合正確的變量命名規(guī)則?( ) 2_year ?Python不支持的數(shù)據(jù)類型有( )。 char ?從鍵盤輸入一個整數(shù)賦值給number,下面哪一句是正確的?( ) number = int(input(‘請輸入一個整數(shù):’)) 令list = [1, 2, 3],則分別執(zhí)行命令del list[1]和list.remove(1)后的list為(

    2024年02月08日
    瀏覽(88)
  • 用python做一個小程序,python設(shè)計一個小程序

    用python做一個小程序,python設(shè)計一個小程序

    大家好,本文將圍繞用python做一個小程序展開說明,python設(shè)計一個小程序是一個很多人都想弄明白的事情,想搞清楚python編寫一個小程序需要先了解以下幾個事情。 這是一個簡單的 PyQt5 小程序,該程序?qū)?chuàng)建一個窗口,并在其中放置一個按鈕和一個文本輸入框。當用戶點擊

    2024年02月02日
    瀏覽(79)
  • Python 程序設(shè)計-系統(tǒng)登錄頁面設(shè)計

    Python 程序設(shè)計-系統(tǒng)登錄頁面設(shè)計

    系統(tǒng)要有管理員登錄、普通用戶登錄和退出三個選項可供選擇 系統(tǒng)要能夠?qū)崿F(xiàn)登入出錯提示,比如賬戶密碼錯誤等,用戶信息保存在user目錄下的文件夾中,存儲在user.csv中 系統(tǒng)要能夠進行歡迎界面顯示,登錄成功后顯示該頁面。 系統(tǒng)要能夠有寫入信息功能,當用戶或管理員

    2024年02月09日
    瀏覽(86)
  • Python程序設(shè)計期末作品完整版|代碼和程序設(shè)計文檔

    Python程序設(shè)計期末作品完整版|代碼和程序設(shè)計文檔

    python程序設(shè)計作品,希望對您有幫助,希望您的一鍵三連! 1.爬取數(shù)據(jù)的意義 富豪榜的出現(xiàn),體現(xiàn)了人們思想的變化:由保守藏富向正向面對財富的轉(zhuǎn)變;由保守向文明開放(–說明了大眾媒體的進步與教育的普及等思想工具的極大地提高);標志著人們對財富對經(jīng)濟正在走向新紀

    2024年02月11日
    瀏覽(89)
  • Python程序設(shè)計——列表

    Python程序設(shè)計——列表

    關(guān)鍵點:一個列表可以存儲任意大小的數(shù)據(jù)集合。 ????????程序一般都需要存儲大量的數(shù)值。假設(shè),舉個例子,需要讀取100個數(shù)字,計算出它們的平均值,然后找出多少個數(shù)字是高于這個平均值的。程序首先讀取100個數(shù)字并計算它們的平均值,然后把每個數(shù)字和平均值進

    2024年02月12日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包