最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)讀取文件的方法總結(jié)

 更新時間:2022年09月02日 14:10:02   作者:嗨學編程  
這篇文章主要為大家詳細介紹了Python中實現(xiàn)讀取文件效果的幾種方法總結(jié),文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

序言

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

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

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

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

不止是香。是真香!

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

1、方法介紹

基本用法

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

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

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

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

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

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

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

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

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

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

進階用法

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

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

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

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

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

fileinput.close():關閉序列。

2、 默認讀取

代碼示例

import fileinput

'當 Python 腳本沒有傳入任何參數(shù)時,fileinput 默認會以 stdin 作為輸入源'
for line in fileinput.input():
    print(f'{line}')

運行結(jié)果

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

俗稱:復讀機

3、處理一個文件

代碼示例

import fileinput

'files 輸入打開文件的名稱即可'
with fileinput.input(files=('output.txt',)) as file:
    for line in file:
        print(f'{fileinput.filename()} 第{fileinput.lineno()}行:{line}',end='')

運行結(jié)果

解析:

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

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

4、處理批量文件

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

調(diào)用方法

fileinput.lineno()方法

代碼示例

import fileinput

'files 輸入打開文件的名稱即可'
with fileinput.input(files=('output.txt','input.txt')) as file:
    for line in file:
        #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()方法

代碼示例

import fileinput

'files 輸入打開文件的名稱即可'
with fileinput.input(files=('test1.txt','test2.txt')) as file:
    for line in file:       
        # fileinput.filelineno()兩個文件單獨讀取,需要單獨排序
        print(f'{fileinput.filename()} 第{fileinput.filelineno()}行: {line}', end='')

運行結(jié)果

與glob配合用法

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

代碼示例

import fileinput
import glob

#glob 匹配te開頭的txt文件
for line in fileinput.input(glob.glob("te*.txt")):
    if fileinput.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

代碼示例

import fileinput

#觸發(fā)backup的動作,源文件內(nèi)容被修改,對源文件進行backup
with fileinput.input(files=("test1.txt",), backup=".bak",inplace=1) as file:
    for line in file:
        print(line.rstrip().replace('111111', '222222'))
        print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='')

運行結(jié)果

6、重定向替換

解析

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

代碼示例:

import fileinput

#觸發(fā)backup的動作,源文件內(nèi)容被修改,對源文件進行backup
with fileinput.input(files=("test2.txt",), inplace=True) as file:
    print("[INFO] task is started...")
    for line in file:
        print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='')
    print("[INFO] task is closed...")

運行結(jié)果

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

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

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

7、進階

openhook含義解析

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

如果沒有傳入任何勾子,fileinput 默認使用的是 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)絡上的文件,思路:

先使用 requests 下載文件到本地

再使用 open 去讀取它;

def online_open(url, mode):
    import requests
    r = requests.get(url) 
    filename = url.split("/")[-1]
    with open(filename,'w') as f1:
        f1.write(r.content.decode("utf-8"))
    f2 = open(filename,'r')
    return f2

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

# -*- coding:utf-8 -*-
# @Time   : 2022-07-23
# @Author : carl_DJ

import fileinput
file_url = 'https://www.csdn.net/robots.txt'
with fileinput.input(files=(file_url,), openhook=online_open) as file:
    for line in file:
        print(line, end="")

代碼整合:

# -*- coding:utf-8 -*-
# @Time   : 2022-07-23
# @Author : carl_DJ
def online_open(url, mode):
    import requests
    r = requests.get(url)
    filename = url.split("/")[-1]
    with open(filename,'w') as f1:
        f1.write(r.content.decode("utf-8"))
    f2 = open(filename,'r')
    return f2

import fileinput
file_url = 'https://www.csdn.net/robots.txt'
with fileinput.input(files=(file_url,), openhook=online_open) as file:
    for line in file:
        print(line, end="")

運行結(jié)果

總結(jié)

關于fileinput的介紹,也就介紹到這里。

fileinput本身是對 open 函數(shù)的再次封裝,所以在讀取的cc部分,就比open顯得更專業(yè),更優(yōu)雅,這也是僅限于讀取的方面。

在寫的方面,相對于open,就不是那么的強悍。

歸根結(jié)底,fileinput還是一個不錯的方法。值得你擁有。

到此這篇關于Python實現(xiàn)讀取文件的方法總結(jié)的文章就介紹到這了,更多相關Python讀取文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Django用戶認證系統(tǒng) 組與權限解析

    Django用戶認證系統(tǒng) 組與權限解析

    這篇文章主要介紹了Django用戶認證系統(tǒng) 組與權限解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python爬蟲使用requests發(fā)送post請求示例詳解

    python爬蟲使用requests發(fā)送post請求示例詳解

    這篇文章主要介紹了python爬蟲使用requests發(fā)送post請求示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Python面向?qū)ο箢惱^承和組合實例分析

    Python面向?qū)ο箢惱^承和組合實例分析

    這篇文章主要介紹了Python面向?qū)ο箢惱^承和組合,結(jié)合實例形式分析了Python3面向?qū)ο罄^承的原理、用法以及繼承與組合相關使用技巧,需要的朋友可以參考下
    2018-05-05
  • Python3.6中Twisted模塊安裝的問題與解決

    Python3.6中Twisted模塊安裝的問題與解決

    這篇文章主要介紹了Python3.6中Twisted模塊安裝的問題與解決,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Python中l(wèi)ogging實例講解

    Python中l(wèi)ogging實例講解

    在本篇文章里小編給大家分享的是關于Python中l(wèi)ogging的詳細介紹內(nèi)容,有興趣的朋友們跟著學習下。
    2019-01-01
  • 用Python中的字典來處理索引統(tǒng)計的方法

    用Python中的字典來處理索引統(tǒng)計的方法

    這篇文章主要介紹了用Python中的字典來處理索引統(tǒng)計的方法,字典的使用是Python學習當中的基礎知識,本文則是相關的一個小實踐,需要的朋友可以參考下
    2015-05-05
  • python中如何使用函數(shù)改變list

    python中如何使用函數(shù)改變list

    這篇文章主要介紹了python中如何使用函數(shù)改變list,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • python使用pygame模塊實現(xiàn)坦克大戰(zhàn)游戲

    python使用pygame模塊實現(xiàn)坦克大戰(zhàn)游戲

    這篇文章主要為大家詳細介紹了python使用pygame模塊實現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Python 使用type來定義類的實現(xiàn)

    Python 使用type來定義類的實現(xiàn)

    今天小編就為大家分享一篇Python 使用type來定義類的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python 判斷文件或文件夾是否存在

    python 判斷文件或文件夾是否存在

    這篇文章主要介紹了python 判斷文件或文件夾是否存在,Python 操作文件時,我們一般要先判斷指定的文件或目錄是否存在,不然容易產(chǎn)生異常,下面我們就來學習如何利用python檢查文件是否存在吧
    2022-03-03

最新評論

青铜峡市| 沿河| 西和县| 定安县| 科技| 日土县| 沧源| 麻栗坡县| 贺州市| 潍坊市| 武山县| 聂荣县| 通山县| 武清区| 沂南县| 井研县| 茂名市| 五寨县| 梁平县| 天祝| 巴彦淖尔市| 杨浦区| 奇台县| 成都市| 攀枝花市| 伊宁市| 香港 | 筠连县| 辽阳市| 社旗县| 义马市| 介休市| 静宁县| 武山县| 防城港市| 琼海市| 常山县| 马鞍山市| 长寿区| 垦利县| 从化市|