帶你一文搞懂Python文件的讀寫操作
一、Python 文件讀寫概述
Python 在文件讀寫操作中,會使用「內(nèi)置函數(shù)」和「Pandas 庫」兩種方式。
先來看內(nèi)置函數(shù),包括 open()、read()、readline()、readlines()、write()、writelines()、close() 等方法,也是接下來給大家詳細(xì)介紹的內(nèi)容。
再看 Pandas 庫,包括 read_csv()、to_csv()、read_excel()、to_excel()、read_json()、to_json() 等方法,我們后面講到 Pandas 庫的時候,再詳細(xì)講講。
在使用「內(nèi)置函數(shù)」的時候,思路基本上是:
1、打開文件
2、開始「讀」或者「寫」的操作
3、關(guān)閉文件
二、使用 open() 打開文件
Python 使用 open() 方法,可以根據(jù)指定文件名或標(biāo)識符來打開文件。
語法格式:
file = open('filename.txt', mode = 'r')獲取到的 file 是一個文件對象。
Python 文件的打開模式,有如下幾種,且可以組合使用:
| 模式 | 描述 |
|---|---|
| ‘r’ | 以「只讀」模式打開文件,如果指定文件不存在,則會報錯,默認(rèn)情況下文件指針指向文件開頭 |
| ‘w’ | 以「只寫」模式打開文件,如果文件不存在,則根據(jù) filename 創(chuàng)建相應(yīng)的文件,如果文件已存在,則會覆蓋原文件 |
| ‘a’ | 以「追加」模式打開文件,如果文件已存在,文件指針會指向文件尾部,將內(nèi)容追加在原文件后面,如果文件不存在,則會新建文件且寫入內(nèi)容 |
| ‘t’ | 以「文本文件」模式打開文件 |
| ‘b’ | 以「二進制」模式打開文件,主要用于打開圖片、音頻等非文本文件 |
| ‘+’ | 打開文件并允許更新(可讀可寫),也就是說,使用參數(shù) w+、a+ 也是可以讀入文件的,在使用的時候,需要注意區(qū)別 |
再告訴你一個秘密,我們在操作文件的時候,因為內(nèi)容很多,所以我們前面學(xué)到的「循環(huán)」終于可以大派用場了,比如「for 循環(huán)」就會經(jīng)常被使用到。
案例代碼:
第一步,新建 hello.txt 文件,如下:
當(dāng)你慢慢調(diào)整了自己看待問題的角度, 也提升了思考的深度,你竟然會發(fā)現(xiàn), 你所處在的「超一線城市」其實是一個「場」。 在這個場域里頭,你可以遇見無限的可能性, 每一個維度都暗含大藍海,都有大把的機會, 你甚至運氣爆棚,在某次從天而降的大機遇中, 能迅速成長為自己可能完全沒法想象的人。
第二步,使用 for 循環(huán)讀取文件,如下:
# 打開 hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')
# 使用 for 循環(huán),將讀到的內(nèi)容,打印出來
num = 1
for con in hello:
print('第 %d 行:' % num, con)
num += 1
# 最后需要將文件關(guān)閉
hello.close()
第三步,改良,使用 read() 方法讀取
# 打開 hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')
# 使用 read()
con = hello.read()
# 打印
print(con)
# 最后需要將文件關(guān)閉
hello.close()
拓展:
如果,我將上面的第二步和第三步,放在同一個文件中寫,就會出現(xiàn)「文本文件指針復(fù)位」的問題。
因為我們通過 for 循環(huán),已經(jīng)讓「文本文件指針」從文件的開頭讀到文本末尾,已經(jīng)把所有內(nèi)容讀取,此時指針在文末位置。
如果說,再讓程序執(zhí)行 read() 方法,則會發(fā)現(xiàn)后面已經(jīng)沒有內(nèi)容可讀了,所以程序執(zhí)行后,不會輸出任何內(nèi)容。
解決辦法,調(diào)用 seek() 方法,指定偏移量為 0,來將文本文件指針「復(fù)位」即可。
你還可以通過 tell() 方法,獲取文件指針的當(dāng)前位置。如果此時文件指針在文末位置,獲取到的其實就是整個文本的字節(jié)數(shù),也相當(dāng)是這個文件的大小了。
# 打開 hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')
# 使用 for 循環(huán),將讀到的內(nèi)容,打印出來
num = 1
for con in hello:
print('第 %d 行:' % num, con)
num += 1
# 獲取文件指針的位置
print(hello.tell())
# 將文本文件的指針,復(fù)位
hello.seek(0)
# 使用 read()
con = hello.read()
print("---- 使用 read() -----")
print(con)
# 最后需要將文件關(guān)閉
hello.close()
三、使用 read()、readline()、readlines() 讀取數(shù)據(jù)
當(dāng)文件很大的時候,單純使用 read() 方法就很難一次性讀入內(nèi)存中。
可以使用 readline() 方法,從文中讀取整行信息。
案例代碼:
# 打開 hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')
# 使用 readline(),讀取一行信息
con = hello.readline()
print(con)
# 最后需要將文件關(guān)閉
hello.close()
但如果想讀取所有行的信息,就需要使用 readlines() 方法了
readlines() 和 read() 的區(qū)別,在于讀取的「顆粒大小」,前者顆粒較大以行為單位,后者顆粒較小以字節(jié)為單位。
案例代碼:
try:
# 打開 hello.txt 文件,指定「只讀模式」
hello = open('helo.txt', 'r')
# 使用 readlines(),讀取全部信息
con = hello.readlines()
print(con)
finally:
print('出問題了')
# 最后需要將文件關(guān)閉
hello.close()
另外,提醒一下,讀寫文件的時候,經(jīng)常會出現(xiàn)一些 IOError 錯誤異常,建議寫在 try…finally… 異常捕獲塊中,養(yǎng)成良好的編碼習(xí)慣。
比如,我們經(jīng)常執(zhí)行到最后,會忘記關(guān)閉文件,這就很可能會帶來很多潛在的問題,可以在 finally 中,也就是程序最后會執(zhí)行的部分,去關(guān)閉我們已打開的文件。
案例代碼:
try:
# 打開 hello.txt 文件,指定「只讀模式」
hello = open('helo.txt', 'r')
# 使用 readlines(),讀取全部信息
con = hello.readlines()
print(con)
finally:
print('出問題了')
# 最后需要將文件關(guān)閉
hello.close()
四、使用 write()、writelines() 寫入文件
還有一種更好玩兒,可以用 with…as… 語句,它天生用來防止我們忘記關(guān)閉文件。
當(dāng)你引入 with 語句,它會在你訪問完文件之后,根據(jù)上下文自動調(diào)用 close() 方法來關(guān)閉。
語法格式:
with expression as target :
statements案例代碼:
with open('hello.txt') as hello :
hello.write("I Love You")在上面的代碼中,我們在打開文件的時候,指定了 ‘w’ 模式,啟動了寫的操作。而且還使用了一個 write() 方法,它是用來向文件中寫入指定字符串的。
在代碼中操作的字符串內(nèi)容,主要存儲在緩沖區(qū),我們在文件關(guān)閉前或緩沖區(qū)刷新前,可以將它寫入文件。
最后,用一下 writelines() 方法,將列表中的三行數(shù)據(jù),寫到文件中。
案例代碼:
# 創(chuàng)建一個列表
txtlist = ['Python 私教\n', 'Java 私教\n', 'C++ 私教\n']
# 寫入文件
with open('hello.txt') as hello :
hello.writelines(txtlist)
補充:文件迭代器
Python可是大名鼎鼎的Python,不來點niubility的操作那還叫Python嗎?
Python中,文件對象是可迭代的,意味著可以直接在for循環(huán)中使用文件對象,從而進行迭代文件的內(nèi)容。下面兩個demo都是行得通的:
f = open(filename)
for line in f:
#文件操作
f.close()
1
2
3
4
for line in open(filename):
#文件操作最后
到此這篇關(guān)于Python文件的讀寫操作的文章就介紹到這了,更多相關(guān)Python文件讀寫操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用str & repr轉(zhuǎn)換字符串
str() 是將 數(shù)值 轉(zhuǎn)成字符串 repr() 是將一個對象 轉(zhuǎn)成字符串 顯示 看明白了么:str()是將一個對象轉(zhuǎn)化成str對象 repr()是將一個對象可視化,使用字符串輸出,使編程人員看到其的內(nèi)部結(jié)構(gòu)2016-10-10
Python?encode()方法和decode()方法詳解
encode() 方法為字符串類型(str)提供的方法,用于將 str 類型轉(zhuǎn)換成 bytes 類型,這個過程也稱為“編碼”,這篇文章主要介紹了Python?encode()方法和decode()方法,需要的朋友可以參考下2022-12-12
pytorch實現(xiàn)對輸入超過三通道的數(shù)據(jù)進行訓(xùn)練
今天小編就為大家分享一篇pytorch實現(xiàn)對輸入超過三通道的數(shù)據(jù)進行訓(xùn)練,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01

