一文帶你搞懂Python中的文件操作
一、文件的編碼
計(jì)算機(jī)中有許多可用編碼:
- UTF-8
- GBK
- Big5
- 等
UTF-8
是目前全球通用的編碼格式
除非有特殊需求,否則,一律以UTF-8格式進(jìn)行文件編碼即可。
二、文件的讀取
2.1 open()打開(kāi)函數(shù)
注意:此時(shí)的f
是open
函數(shù)的文件對(duì)象,對(duì)象是Python中一種特殊的數(shù)據(jù)類(lèi)型,擁有屬性和方法,可以使用對(duì)象.屬性或?qū)ο?方法對(duì)其進(jìn)行訪問(wèn),后續(xù)面向?qū)ο笳n程會(huì)給大家進(jìn)行詳細(xì)的介紹。
name:是要打開(kāi)的目標(biāo)文件名的字符串(可以包含文件所在的具體路徑)。
mode:設(shè)置打開(kāi)文件的模式(訪問(wèn)模式):只讀、寫(xiě)入、追加等。
encoding:編碼格式(推薦使用UTF-8)
open(name, mode, encoding)
例子:
f = open('./test.txt', 'r', encoding='utf-8')
2.2 mode常用的三種基礎(chǔ)訪問(wèn)模式
模式 | 描述 |
---|---|
f | 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
w | 打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,原有內(nèi)容會(huì)被刪除 。如果該文件不存在,創(chuàng)建新文件。 |
a | 打開(kāi)一個(gè)文件用于追加。如果該文件已存在,新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。 如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
2.3 讀操作相關(guān)方法
操作匯總
操作 | 功能 |
---|---|
文件對(duì)象 = open(file, mode, encoding) | 打開(kāi)文件獲得文件對(duì)象 |
文件對(duì)象.read(num) | 讀取指定長(zhǎng)度字節(jié)<br/>不指定num讀取文件全部 |
文件對(duì)象.readline() | 讀取一行 |
文件對(duì)象.readlines() | 讀取全部行,得到列表 |
for line in 文件對(duì)象 | for循環(huán)文件行,一次循環(huán)得到一行數(shù)據(jù) |
文件對(duì)象.close() | 關(guān)閉文件對(duì)象 |
with open() as f | 通過(guò)with open語(yǔ)法打開(kāi)文件,可以自動(dòng)關(guān)閉 |
2.3.1 read()方法:
num表示要從文件中讀取的數(shù)據(jù)的長(zhǎng)度(單位是字節(jié)),如果沒(méi)有傳入num,那么就表示讀取文件中所有的數(shù)據(jù)。
文件對(duì)象.read(num)
2.3.2 readlines()方法
readlines
可以按照行的方式把整個(gè)文件中的內(nèi)容進(jìn)行一次性讀取,并且返回的是一個(gè)列表,其中每一行的數(shù)據(jù)為一個(gè)元素。
f = open('python.txt') content = f.readlines() # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc'] print(content) # 關(guān)閉文件 f.close()
例:
readline()方法:一次讀取一行內(nèi)容
f = open('python.txt') content = f.readline() print(f'第一行:{content}') content = f.readline() print(f'第二行:{content}') # 關(guān)閉文件 f.close()
for循環(huán)讀取文件行:
for line in open("python.txt", "r"): print(line) # 每一個(gè)line臨時(shí)變量,就記錄了文件的一行數(shù)據(jù)
2.3.3 close() 關(guān)閉文件對(duì)象
f = open("python.txt", "r") f.close() # 最后通過(guò)close,關(guān)閉文件對(duì)象,也就是關(guān)閉對(duì)文件的占用 # 如果不調(diào)用close,同時(shí)程序沒(méi)有停止運(yùn)行,那么這個(gè)文件將一直被Python程序占用。
2.3.4 with open 語(yǔ)法
with open("python.txt", "r") as f: f.readlines() # 通過(guò)在with open的語(yǔ)句塊中對(duì)文件進(jìn)行操作 # 可以在操作完成后自動(dòng)關(guān)閉close文件,避免遺忘掉close方法
案例:通過(guò)文件讀取操作,讀取此文件,統(tǒng)計(jì)itheima單詞出現(xiàn)的次數(shù)
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima
index = 0 with open('./test.txt', 'r', encoding='utf-8') as f: for line in f: line = line.strip() # print(line) str = line.split(' ') print(str) for val in str: if val == 'it': index += 1 print(f'index:{index}')
三、文件的寫(xiě)入
寫(xiě)操作快速入門(mén)
注意:
直接調(diào)用write,內(nèi)容并未真正寫(xiě)入文件,而是會(huì)積攢在程序的內(nèi)存中,稱之為緩沖區(qū)
- 當(dāng)調(diào)用flush的時(shí)候,內(nèi)容會(huì)真正寫(xiě)入文件
- 這樣做是避免頻繁的操作硬盤(pán),導(dǎo)致效率下降(攢一堆,一次性寫(xiě)磁盤(pán))
- 文件如果不存在,使用”w”模式,會(huì)創(chuàng)建新文件
- 文件如果存在,使用”w”模式,會(huì)將原有內(nèi)容清空
例:
# 1. 打開(kāi)文件 f = open('python.txt', 'w') # 2.文件寫(xiě)入 f.write('hello world') # 3. 內(nèi)容刷新 f.flush()
四、文件的追加
追加寫(xiě)入操作快速入門(mén)
注意:
- a模式,文件不存在會(huì)創(chuàng)建文件
- a模式,文件存在會(huì)在最后,追加寫(xiě)入文件
案例演示:
# 1. 打開(kāi)文件,通過(guò)a模式打開(kāi)即可 f = open('python.txt', 'a') # 2.文件寫(xiě)入 f.write('hello world') # 3. 內(nèi)容刷新 f.flush()
五、文件操作綜合案例
完成文件備份案例:
bill.txt name,date,money,type,remarks 周杰輪,2022-01-01,100000,消費(fèi),正式 周杰輪,2022-01-02,300000,收入,正式 周杰輪,2022-01-03,100000,消費(fèi),測(cè)試 林俊節(jié),2022-01-01,300000,收入,正式 林俊節(jié),2022-01-02,100000,消費(fèi),測(cè)試 林俊節(jié),2022-01-03,100000,消費(fèi),正式 林俊節(jié),2022-01-04,100000,消費(fèi),測(cè)試 林俊節(jié),2022-01-05,500000,收入,正式 張學(xué)油,2022-01-01,100000,消費(fèi),正式 張學(xué)油,2022-01-02,500000,收入,正式 張學(xué)油,2022-01-03,900000,收入,測(cè)試 王力鴻,2022-01-01,500000,消費(fèi),正式 王力鴻,2022-01-02,300000,消費(fèi),測(cè)試 王力鴻,2022-01-03,950000,收入,正式 劉德滑,2022-01-01,300000,消費(fèi),測(cè)試 劉德滑,2022-01-02,100000,消費(fèi),正式 劉德滑,2022-01-03,300000,消費(fèi),正式
f2 = open('bill.txt.bak', 'a', encoding="utf-8") with open('bill', 'r', encoding="UTF-8") as f: for line in f: line = line.strip() str = line.split(',') if str[4] == '測(cè)試': continue else: f2.write(f'{line}\n') f2.close()
到此這篇關(guān)于一文帶你搞懂Python中的文件操作的文章就介紹到這了,更多相關(guān)Python文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何寫(xiě)好?Python?的?Lambda?函數(shù)
這篇文章主要介紹了如何寫(xiě)好?Python?的?Lambda?函數(shù),Lambda?函數(shù)是?Python?中的匿名函數(shù),下面文章通過(guò)介紹Lambda?函數(shù)的相關(guān)內(nèi)容展開(kāi)文章主題,需要的小伙伴可以參考一下2022-03-03Python flask框架定時(shí)任務(wù)apscheduler應(yīng)用介紹
Flask是Python社區(qū)非常流行的一個(gè)Web開(kāi)發(fā)框架,本文將嘗試將介紹APScheduler應(yīng)用于Flask之中實(shí)現(xiàn)定時(shí)任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10解決Scrapy安裝錯(cuò)誤:Microsoft Visual C++ 14.0 is required...
下面小編就為大家?guī)?lái)一篇解決Scrapy安裝錯(cuò)誤:Microsoft Visual C++ 14.0 is required...的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10使用Pytorch訓(xùn)練two-head網(wǎng)絡(luò)的操作
這篇文章主要介紹了使用Pytorch訓(xùn)練two-head網(wǎng)絡(luò)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python?return函數(shù)返回值類(lèi)型和幫助函數(shù)使用教程
這篇文章主要為大家介紹了Python?return函數(shù)返回值類(lèi)型和幫助函數(shù)使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06關(guān)于pycharm?python3.7成功安裝dlib庫(kù)的問(wèn)題
這篇文章主要介紹了pycharm?python3.7成功安裝dlib庫(kù)的解決方法,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理基本操作關(guān)鍵詞
本文是Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理系列文章,帶大家開(kāi)啟一段學(xué)習(xí)自然語(yǔ)言處理 (NLP) 的旅程. 本文主要學(xué)習(xí)NLP自然語(yǔ)言處理關(guān)鍵詞的操作2021-09-09Python實(shí)現(xiàn)決策樹(shù)C4.5算法的示例
本篇文章主要介紹了Python實(shí)現(xiàn)決策樹(shù)C4.5算法的示例,詳解的介紹了決策樹(shù)C4.5算法的原理和實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-05-05Python實(shí)現(xiàn)運(yùn)行其他程序的四種方式實(shí)例分析
這篇文章主要介紹了Python實(shí)現(xiàn)運(yùn)行其他程序的四種方式,結(jié)合實(shí)例形式分析了Python執(zhí)行其他程序相關(guān)模塊與函數(shù)使用技巧,需要的朋友可以參考下2017-08-08