帶你一文搞懂Python文件的讀寫操作
一、Python 文件讀寫概述
Python 在文件讀寫操作中,會使用「內(nèi)置函數(shù)」和「Pandas 庫」兩種方式。
先來看內(nèi)置函數(shù),包括 open()、read()、readline()、readlines()、write()、writelines()、close() 等方法,也是接下來給大家詳細介紹的內(nèi)容。
再看 Pandas 庫,包括 read_csv()、to_csv()、read_excel()、to_excel()、read_json()、to_json() 等方法,我們后面講到 Pandas 庫的時候,再詳細講講。
在使用「內(nèi)置函數(shù)」的時候,思路基本上是:
1、打開文件
2、開始「讀」或者「寫」的操作
3、關(guān)閉文件
二、使用 open() 打開文件
Python 使用 open() 方法,可以根據(jù)指定文件名或標識符來打開文件。
語法格式:
file = open('filename.txt', mode = 'r')
獲取到的 file 是一個文件對象。
Python 文件的打開模式,有如下幾種,且可以組合使用:
模式 | 描述 |
---|---|
‘r’ | 以「只讀」模式打開文件,如果指定文件不存在,則會報錯,默認情況下文件指針指向文件開頭 |
‘w’ | 以「只寫」模式打開文件,如果文件不存在,則根據(jù) filename 創(chuàng)建相應(yīng)的文件,如果文件已存在,則會覆蓋原文件 |
‘a’ | 以「追加」模式打開文件,如果文件已存在,文件指針會指向文件尾部,將內(nèi)容追加在原文件后面,如果文件不存在,則會新建文件且寫入內(nèi)容 |
‘t’ | 以「文本文件」模式打開文件 |
‘b’ | 以「二進制」模式打開文件,主要用于打開圖片、音頻等非文本文件 |
‘+’ | 打開文件并允許更新(可讀可寫),也就是說,使用參數(shù) w+、a+ 也是可以讀入文件的,在使用的時候,需要注意區(qū)別 |
再告訴你一個秘密,我們在操作文件的時候,因為內(nèi)容很多,所以我們前面學到的「循環(huán)」終于可以大派用場了,比如「for 循環(huán)」就會經(jīng)常被使用到。
案例代碼:
第一步,新建 hello.txt 文件,如下:
當你慢慢調(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() 方法,獲取文件指針的當前位置。如果此時文件指針在文末位置,獲取到的其實就是整個文本的字節(jié)數(shù),也相當是這個文件的大小了。
# 打開 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ù)
當文件很大的時候,單純使用 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)成良好的編碼習慣。
比如,我們經(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)閉文件。
當你引入 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-10Python?encode()方法和decode()方法詳解
encode() 方法為字符串類型(str)提供的方法,用于將 str 類型轉(zhuǎn)換成 bytes 類型,這個過程也稱為“編碼”,這篇文章主要介紹了Python?encode()方法和decode()方法,需要的朋友可以參考下2022-12-12pytorch實現(xiàn)對輸入超過三通道的數(shù)據(jù)進行訓(xùn)練
今天小編就為大家分享一篇pytorch實現(xiàn)對輸入超過三通道的數(shù)據(jù)進行訓(xùn)練,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01