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

Python fileinput模塊應用詳解

 更新時間:2022年09月23日 11:04:29   作者:A-L-Kun  
說到fileinput,可能90%的碼農(nóng)表示沒用過,甚至沒有聽說過。這不奇怪,因為在python界,既然open可以走天下,何必要fileinput呢,今天我們來了解下它

一、簡介

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

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

其為open方法的高級封裝:

fileinput模塊可以對一個或多個文件中的內(nèi)容進行迭代、遍歷等操作。

該模塊的input()函數(shù)有點類似文件readlines()方法,區(qū)別在于:

前者是一個迭代對象,即每次只生成一行,需要用for循環(huán)迭代。

后者是一次性讀取所有行。在碰到大文件的讀取時,前者無疑效率更高效。

用fileinput對文件進行循環(huán)遍歷,格式化輸出,查找、替換等操作,非常方便。

二、常用函數(shù)

1、描述

fileinput.input()       # 進行讀取文件對象的初始化,返回能夠用于for循環(huán)遍歷的對象
# return FileInput(files, inplace, backup, mode=mode, openhook=openhook)
fileinput.filename()    # 返回當前文件的名稱
# return fileInput.filename()
fileinput.lineno()      # 返回當前已經(jīng)讀取的行的數(shù)量(或者序號)
# return fileInput.lineno()
fileinput.filelineno()  # 返回當前讀取的行的行號
# return fileInput.filelineno()
fileinput.isfirstline() # 檢查當前行是否是文件的第一行
# return fileInput.isfirstline()
fileinput.isstdin()     # 判斷最后一行是否從stdin中讀取
# return fileInput.isstdin()
fileinput.close()       # 關(guān)閉隊列,也是關(guān)閉文件

fileinput.nextfile()  # 關(guān)閉當前文件以使下次迭代將從下一個文件(如果存在)讀取第一行;不是從該文件讀取的行將不會被計入累計行數(shù)。直到下一個文件的第一行被讀取之后文件名才會改變。
# —>在第一行被讀取之前,此函數(shù)將不會生效;它不能被用來跳過第一個文件。
# —>在最后一個文件的最后一行被讀取之后,此函數(shù)將不再生效。

2、第一個程序

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import fileinput
# 典型用法
for line in fileinput.input():  # 如果input函數(shù)里面不傳入?yún)?shù),則,我們需要從命令行傳入文件路徑
    print(line)

python demo02.py 1.txt 2.txt

三、函數(shù)參數(shù)

1、參數(shù)

我們使用input方法打開文件

fileinput.input(files=None, inplace=False, backup="", bufsize=0, *, mode="r", openhook=None)

參數(shù):

  • files:默認是stdin方式 ,傳入要打開的文件,可以傳入一個文件列表,打開多個文件
  • inplace:是否將標準輸出的結(jié)果寫回文件,默認不取代
  • backup:備份文件的擴展名,只指定擴展名,如.bak。如果該文件的備份文件已存在,則會自動覆蓋。
  • bufsize:緩沖區(qū)大小,默認為0,如果文件很大,可以修改此參數(shù),一般默認即可
  • mode: 讀寫模式,默認為只讀
  • openhook:鉤子函數(shù), 該鉤子用于控制打開的所有文件,比如說編碼方式等,返回一個文件對象

2、批量處理

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import fileinput
from glob import glob  # 使用正則匹配文件
with fileinput.input(files=glob("*.txt"), openhook=fileinput.hook_encoded("utf-8")) as f:  # 讀取當前目錄下,所有的txt文件
    for line in f:
        print(f"{fileinput.filename()} -> {line.strip()} | 第{fileinput.filelineno()}行 | 共讀取{fileinput.lineno()}行")

3、修改備份

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import fileinput
from glob import glob  # 使用正則匹配文件
with fileinput.input(files=glob("*.txt"), inplace=True, backup=".bak") as f:  # 讀取當前目錄下,所有的txt文件,同時新建一個備份文件文件,可以不新建備份文件
    for line in f:
        print(f"{fileinput.filename()} -> {line.strip()} | 第{fileinput.filelineno()}行 | 共讀取{fileinput.lineno()}行")  # 在for循環(huán)里面的print內(nèi)容不會輸出到控制臺上,而是直接輸出到文件對應的行里面

四、鉤子函數(shù)

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

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

1、內(nèi)置函數(shù)

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

  • fileinput.hook_compressed(filename, mode)

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

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

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

  • fileinput.hook_encoded(encoding, errors=None)

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

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

2、自定義函數(shù)

我們定義一個鉤子函數(shù),來實現(xiàn)讀取網(wǎng)絡資源

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import fileinput
from glob import glob  # 使用正則匹配文件
from io import StringIO
from requests import get
def getOnlineSource(url, *args, **kwargs):
    resp = get(url)
    resp.encoding = resp.apparent_encoding
    return StringIO(resp.text)  # 文件對象即為字符串流
with fileinput.input("http://www.baidu.com", openhook=getOnlineSource) as f:  # 獲取對應url中的資源,并輸出
    for line in f:
        print(line)  # 輸出每一行內(nèi)容,即,等于是輸出io流中的所有內(nèi)偶然

到此這篇關(guān)于Python fileinput庫應用詳解的文章就介紹到這了,更多相關(guān)Python fileinput庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中字符串格式化的方法詳解

    Python中字符串格式化的方法詳解

    眾所周知,我們可以使用 print() 方法來輸出一個固定內(nèi)容的字符串,就像是 print("Hello, world!") 一樣,但是,在現(xiàn)實中,我們很多時候是需要輸出一些內(nèi)容不斷變化,或者內(nèi)容動態(tài)生成的字符串,本文將介紹如何按照需要,在Python中格式化一個字符串
    2023-10-10
  • pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn)

    pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn)

    這篇文章主要介紹了pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • python實現(xiàn)替換word中的關(guān)鍵文字(使用通配符)

    python實現(xiàn)替換word中的關(guān)鍵文字(使用通配符)

    今天小編就為大家分享一篇python實現(xiàn)替換word中的關(guān)鍵文字(使用通配符),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 詳解Django框架中用戶的登錄和退出的實現(xiàn)

    詳解Django框架中用戶的登錄和退出的實現(xiàn)

    這篇文章主要介紹了詳解Django框架中用戶的登錄和退出的實現(xiàn),Django是重多Python人氣框架中最為知名的一個,需要的朋友可以參考下
    2015-07-07
  • Python 給下載文件顯示進度條和下載時間的實現(xiàn)

    Python 給下載文件顯示進度條和下載時間的實現(xiàn)

    這篇文章主要介紹了Python 給下載文件顯示進度條和下載時間的代碼,本文通過實例代碼截圖相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • numpy矩陣數(shù)值太多不能全部顯示的解決

    numpy矩陣數(shù)值太多不能全部顯示的解決

    這篇文章主要介紹了numpy矩陣數(shù)值太多不能全部顯示的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 使用Python快速進行Excel合并的幾種場景

    使用Python快速進行Excel合并的幾種場景

    由于工作需要,客戶需要將多個excel文件合并成一個excel中,下面這篇文章主要給大家介紹了關(guān)于使用Python快速進行Excel合并的幾種場景,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • django 使用內(nèi)置messages的操作

    django 使用內(nèi)置messages的操作

    這篇文章主要介紹了django 使用內(nèi)置messages的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python中g(shù)lobal用法實例分析

    python中g(shù)lobal用法實例分析

    這篇文章主要介紹了python中g(shù)lobal用法,較為詳細的分析了global的功能并實例演示了相應的使用技巧,需要的朋友可以參考下
    2015-04-04
  • python實現(xiàn)井字棋游戲

    python實現(xiàn)井字棋游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)井字棋游戲的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論

高密市| 周至县| 罗江县| 福安市| 芷江| 杭锦旗| 宽城| 玉龙| 仲巴县| 卢湾区| 康定县| 克拉玛依市| 宁安市| 淳安县| 凤翔县| 土默特左旗| 华容县| 高阳县| 平昌县| 和龙市| 哈尔滨市| 东安县| 岳西县| 杭锦后旗| 金湖县| 安远县| 甘肃省| 梁平县| 镇江市| 阳高县| 开阳县| 望谟县| 山丹县| 赫章县| 濮阳县| 将乐县| 大渡口区| 乌拉特中旗| 淮南市| 纳雍县| 正镶白旗|