Python實現(xiàn)讀取文件的方法總結(jié)_第1頁
Python實現(xiàn)讀取文件的方法總結(jié)_第2頁
Python實現(xiàn)讀取文件的方法總結(jié)_第3頁
Python實現(xiàn)讀取文件的方法總結(jié)_第4頁
Python實現(xiàn)讀取文件的方法總結(jié)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第Python實現(xiàn)讀取文件的方法總結(jié)目錄序言1、方法介紹2、默認(rèn)讀取3、處理一個文件4、處理批量文件5、讀取與備份6、重定向替換7、進階總結(jié)

序言

哈嘍兄弟們,今天咱們來了解一下fileinput。

說到fileinput,可能90%的碼農(nóng)表示沒用過,甚至沒有聽說過。

這不奇怪,因為在python界,既然open可以走天下,何必要fileinput呢?

但是,今天我還是要介紹fileinput這個方法,因為太奈斯了。

不止是香。是真香!

接下來,就跟著我,一起fileinput,對,就是這個feel。

1、方法介紹

基本用法

先來看一下fileinput的基本功能:

fileinput.filename():返回當(dāng)前被讀取的文件名。

在第一行被讀取之前,返回None。

fileinput.fileno():返回以整數(shù)表示的當(dāng)前文件文件描述符。

當(dāng)未打開文件時(處在第一行和文件之間),返回-1。

fileinput.lineno():返回已被讀取的累計行號。

在第一行被讀取之前,返回0。在最后一個文件的最后一行被讀取之后,返回該行的行號。

fileinput.filelineno():返回當(dāng)前文件中的行號。

在第一行被讀取之前,返回0。

在最后一個文件的最后一行被讀取之后,返回此文件中該行的行號。

進階用法

fileinput.isfirstline():如果剛讀取的行是其所在文件的第一行則返回True,否則返回False。

fileinput.isstdin():如果最后讀取的行來自sys.stdin則返回True,否則返回False。

fileinput.nextfile():關(guān)閉當(dāng)前文件以使下次迭代將從下一個文件(如果存在)讀取第一行;不是從該文件讀取的行將不會被計入累計行數(shù)。直到下一個文件的第一行被讀取之后文件名才會改變。

在第一行被讀取之前,此函數(shù)將不會生效;它不能被用來跳過第一個文件。

在最后一個文件的最后一行被讀取之后,此函數(shù)將不再生效。

fileinput.close():關(guān)閉序列。

2、默認(rèn)讀取

代碼示例

importfileinput

'當(dāng)Python腳本沒有傳入任何參數(shù)時,fileinput默認(rèn)會以stdin作為輸入源'

forlineinfileinput.input():

print(f'{line}')

運行結(jié)果

你輸入的內(nèi)容,程序都會讀取并再輸出。

俗稱:復(fù)讀機

3、處理一個文件

代碼示例

importfileinput

'files輸入打開文件的名稱即可'

withfileinput.input(files=('output.txt',))asfile:

forlineinfile:

print(f'{fileinput.filename()}第{fileinput.lineno()}行:{line}',end='')

運行結(jié)果

解析:

fileinput有且僅有這兩種讀取模式:r,rb

fileinput.input()默認(rèn)使用mode=r的模式讀取文件,如果你的文件是二進制的,可以使用mode=rb模式。

4、處理批量文件

多文件序號連續(xù)排序

調(diào)用方法

fileinput.lineno()方法

代碼示例

importfileinput

'files輸入打開文件的名稱即可'

withfileinput.input(files=('output.txt','input.txt'))asfile:

forlineinfile:

#fileinput.lineno()把兩個文件的整合陳一個文件對象file,需要排序輸出

print(f'{fileinput.filename()}第{fileinput.lineno()}行:{line}',end='')

#fileinput.filelineno()兩個文件單獨讀取,需要單獨排序

print(f'{fileinput.filename()}第{fileinput.filelineno()}行:{line}',end='')

運行結(jié)果

多文件序號單獨排序

調(diào)用方法

fileinput.filelineno()方法

代碼示例

importfileinput

'files輸入打開文件的名稱即可'

withfileinput.input(files=('test1.txt','test2.txt'))asfile:

forlineinfile:

#fileinput.filelineno()兩個文件單獨讀取,需要單獨排序

print(f'{fileinput.filename()}第{fileinput.filelineno()}行:{line}',end='')

運行結(jié)果

與glob配合用法

在顏值的時代,上面的輸出樣式,已經(jīng)無法滿足我們的需要了,于是乎,我們就想到了glob。

代碼示例

importfileinput

importglob

#glob匹配te開頭的txt文件

forlineinfileinput.input(glob.glob("te*.txt")):

iffileinput.isfirstline():

#輸出讀取文件

print('='*10,f'讀取文件{fileinput.filename()}','='*10)

#fileinput.filelineno()方法讀取

print(str(fileinput.filelineno())+':'+line.upper(),end='')

運行結(jié)果

就這顏值,哪個小姐姐能不喜歡呢。

5、讀取與備份

調(diào)用方法

fileinput.input的backup參數(shù),可以指定備份的后綴名,比如.bak

代碼示例

importfileinput

#觸發(fā)backup的動作,源文件內(nèi)容被修改,對源文件進行backup

withfileinput.input(files=("test1.txt",),backup=".bak",inplace=1)asfile:

forlineinfile:

print(line.rstrip().replace('111111','222222'))

print(f'{fileinput.filename()}第{fileinput.lineno()}行:{line}',end='')

運行結(jié)果

6、重定向替換

解析

上面的例子,用到了inplace參數(shù),表示是否將標(biāo)準(zhǔn)輸出的結(jié)果寫回文件,默認(rèn)不取代。

代碼示例:

importfileinput

#觸發(fā)backup的動作,源文件內(nèi)容被修改,對源文件進行backup

withfileinput.input(files=("test2.txt",),inplace=True)asfile:

print("[INFO]taskisstarted...")

forlineinfile:

print(f'{fileinput.filename()}第{fileinput.lineno()}行:{line}',end='')

print("[INFO]taskisclosed...")

運行結(jié)果

通過運行結(jié)果,可以看到:

在for循環(huán)體內(nèi)的print內(nèi)容會寫回到原文件中了。

而在for循環(huán)體外的print則沒有變化。

7、進階

openhook含義解析

在fileinput.input()中有一個openhook的參數(shù),它支持用戶傳入自定義的對象讀取方法;

如果沒有傳入任何勾子,fileinput默認(rèn)使用的是open函數(shù);

方法介紹

fileinput內(nèi)置了兩種勾子

1、fileinput.hook_compressed(filename,mode)

使用gzip和bz2模塊透明地打開gzip和bzip2壓縮的文件(通過擴展名.gz和.bz2來識別);

如果文件擴展名不是.gz或.bz2,文件會以正常方式打開(即使用open()并且不帶任何解壓操作);

使用示例:fi=fileinput.FileInput(openhook=fileinput.hook_compressed)

2、fileinput.hook_encoded(encoding,errors=None)

返回一個通過open()打開每個文件的鉤子,使用給定的encoding和errors來讀取文件。

使用示例:fi=fileinput.FileInput(openhook=fileinput.hook_encoded(utf-8,surrogateescape))

示例實戰(zhàn)

假如我想要使用fileinput來讀取網(wǎng)絡(luò)上的文件,思路:

先使用requests下載文件到本地

再使用open去讀取它;

defonline_open(url,mode):

importrequests

r=requests.get(url)

filename=url.split("/")[-1]

withopen(filename,'w')asf1:

f1.write(r.content.decode("utf-8"))

f2=open(filename,'r')

returnf2

直接將這個函數(shù)傳給openhook即可:

#-*-coding:utf-8-*-

#@Time:2025-07-23

#@Author:carl_DJ

importfileinput

file_url='/robots.txt'

withfileinput.input(files=(file_url,),openhook=online_open)asfile:

forlineinfile:

print(line,end="")

代碼整合:

#-*-coding:utf-8-*-

#@Time:2025-07-23

#@Author:carl_DJ

defonline_open(url,mode):

importrequests

r=requests.get(url)

filename=url.split("/")[-1]

withopen(filename,'w')asf1:

f1.write(r.content.decode("utf-8"))

f2=open(filename,'r')

returnf2

importfileinput

file_url='/robots.txt'

withfileinput.input(files=(fi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論