亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

linecache模塊加載和緩存文件內(nèi)容詳解

 更新時(shí)間:2018年01月11日 10:47:23   作者:GanZiQim  
這篇文章主要介紹了linecache模塊加載和緩存文件內(nèi)容詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下

linecache模塊

接觸到linecache這個(gè)模塊是因?yàn)榍皟商熳xattrs源碼的時(shí)候看到內(nèi)部代碼引用了這個(gè)模塊來(lái)模擬一個(gè)假文件,帶著一臉疑問(wèn)順便讀了一下這個(gè)模塊的源碼,發(fā)現(xiàn)其實(shí)也就那么回事兒,代碼不多,在這總結(jié)一下。

linecache模塊可以讀取文件并將文件內(nèi)容緩存起來(lái),方便后面多次讀取。這個(gè)模塊原本被設(shè)計(jì)用來(lái)讀取Python模塊的源代碼,所以當(dāng)一個(gè)文件名不在指定路徑下的時(shí)候,模塊會(huì)通過(guò)搜索路徑(search path)來(lái)嘗試讀取文件。

接口

linecache模塊的__all__參數(shù)其實(shí)只提供了getline/clearcache/checkcache三個(gè)接口,但實(shí)際上可以使用的不止這些,下面我會(huì)對(duì)所有接口逐個(gè)進(jìn)行介紹。

linecache.getline(filename, lineno, module_globals=None)

獲取指定文件的某一行,filename指定文件名、lineno指定行號(hào)、module_globals用于指定模塊的上下文我也不知道怎么稱呼,姑且稱為上下文吧,最后一個(gè)參數(shù)其實(shí)到會(huì)傳到linecache.updatecache()里,用于嘗試使用__loader__加載文件,一般情況下不會(huì)用到最后一個(gè)參數(shù),忽略即可。當(dāng)行號(hào)小于一或大于文件最大行號(hào)時(shí)函數(shù)直接返回空字符串。

linecache.clearcache()

清空所有緩存,注意是所有。

linecache.checkcache(filename=None)

這個(gè)函數(shù)用于檢查緩存,如果文件的大小或者修改時(shí)間有變化,會(huì)把文件原先的緩存刪除,如果文件是懶加載的則保持不變。當(dāng)filename為None時(shí)檢查緩存中的所有文件。

以下是沒(méi)寫(xiě)進(jìn)模塊__all__參數(shù)的接口。

linecache.lazycache(filename, module_globals)

對(duì)指定文件使用懶加載,啟用懶加載成功的文件會(huì)在實(shí)際調(diào)用獲取內(nèi)容的接口時(shí)才將文件內(nèi)容加載進(jìn)內(nèi)存,使用這個(gè)可以避免多余的文件IO。返回值為一個(gè)布爾值,當(dāng)懶加載成功時(shí)返回True,如果文件內(nèi)容已經(jīng)實(shí)際加載進(jìn)內(nèi)存或者加載失敗則返回False。

這個(gè)函數(shù)的module_globals參數(shù)是必填的,其實(shí)就是傳入要加載文件對(duì)應(yīng)模塊的上下文。比如加載linecache模塊,則傳入linecache.__dict__或者vars(linecache)(目前只想到這兩種方法,當(dāng)然你要自己構(gòu)建一個(gè)字典傳進(jìn)去也是可以的)。然后函數(shù)會(huì)根據(jù)上下文獲取__loader__的get_source函數(shù)保存到緩存中。這個(gè)函數(shù)是在Python3.5后新增的。

linecache.updatecache(filename, module_globals=None)

這個(gè)函數(shù)是整個(gè)模塊的核心,用于更新文件緩存并返回文件內(nèi)容。函數(shù)中間任何一個(gè)環(huán)節(jié)出錯(cuò)了會(huì)返回一個(gè)空列表。

對(duì)于普通文件,內(nèi)部使用tokenize.open()函數(shù)用于打開(kāi)文件,檢測(cè)文件的編碼并使用檢測(cè)到的編碼打開(kāi)文件,如果缺失編碼默認(rèn)使用UTF-8。如果給定路徑無(wú)法打開(kāi)文件則使用sys.path指定的路徑嘗試加載。如果文件內(nèi)容的最后一行不帶\n,會(huì)自動(dòng)在最后一個(gè)字符加上\n。

對(duì)于懶加載的文件,則調(diào)用懶加載時(shí)保存的get_source函數(shù)獲取文件內(nèi)容。

注意:linecache在打開(kāi)文件之后使用readlines一次性加載所有文件內(nèi)容,所以在文件很多或者文件太大時(shí)會(huì)出現(xiàn)問(wèn)題,所以還是應(yīng)該謹(jǐn)慎使用。

linecache.getlines(filename, module_globals=None)

獲取文件所有內(nèi)容,如果文件尚未加載或者是懶加載,會(huì)調(diào)用linecache.updatecache()加載文件內(nèi)容,如果出現(xiàn)MemoryError則清空緩存。linecache.getline()其實(shí)內(nèi)部就是調(diào)用了這個(gè)函數(shù)。

linecache.cache

這是一個(gè)字典,所有文件的緩存就存在這里面。字典的Key是你讀取時(shí)傳入的filename,Value是一個(gè)保存了文件大小、修改時(shí)間、內(nèi)容、名字的元組,當(dāng)文件為懶加載時(shí)則是對(duì)應(yīng)__loader__的get_source函數(shù)。

總結(jié)

Python標(biāo)準(zhǔn)庫(kù)內(nèi)置了很多基礎(chǔ)模塊,平時(shí)不會(huì)注意到,但是總有一些別的代碼會(huì)依賴到這些基礎(chǔ)設(shè)施,像標(biāo)準(zhǔn)庫(kù)里的pdb和traceback都有用到linecache模塊。這里面其實(shí)有不少代碼是能加以利用的,平時(shí)多多讀源碼,會(huì)有驚喜的。

以上就是本文關(guān)于linecache模塊加載和緩存文件內(nèi)容詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Python?中?Pandas?文件操作和讀取?CSV?參數(shù)詳解

    Python?中?Pandas?文件操作和讀取?CSV?參數(shù)詳解

    CSV?又稱逗號(hào)分隔值文件,是一種簡(jiǎn)單的文件格式,以特定的結(jié)構(gòu)來(lái)排列表格數(shù)據(jù),這篇文章主要介紹了Python?之?Pandas?文件操作和讀取?CSV?參數(shù)詳解,需要的朋友可以參考下
    2023-03-03
  • 使用python實(shí)現(xiàn)自動(dòng)化控制電腦版微信

    使用python實(shí)現(xiàn)自動(dòng)化控制電腦版微信

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python去調(diào)用Windows API實(shí)現(xiàn)模擬人工操作的方式去實(shí)現(xiàn)控制微信電腦版,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • python遞歸刪除指定目錄及其所有內(nèi)容的方法

    python遞歸刪除指定目錄及其所有內(nèi)容的方法

    下面小編就為大家?guī)?lái)一篇python遞歸刪除指定目錄及其所有內(nèi)容的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • pytorch如何自定義數(shù)據(jù)集

    pytorch如何自定義數(shù)據(jù)集

    這篇文章主要介紹了pytorch自定義數(shù)據(jù)集,在識(shí)別手寫(xiě)數(shù)字的例子中,數(shù)據(jù)集是直接下載的,但如果我們自己收集了一些數(shù)據(jù),存在電腦文件夾里,我們?cè)撊绾伟堰@些數(shù)據(jù)變?yōu)榭梢栽赑yTorch框架下進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練的數(shù)據(jù)集呢,即如何自定義數(shù)據(jù)集呢,需要的朋友可以參考下
    2024-01-01
  • Python爬蟲(chóng)基礎(chǔ)講解之scrapy框架

    Python爬蟲(chóng)基礎(chǔ)講解之scrapy框架

    scrapy是一個(gè)使用Python語(yǔ)言(基于Twisted框架)編寫(xiě)的開(kāi)源網(wǎng)絡(luò)爬蟲(chóng)框架,目前由scrapinghub Ltd維護(hù).Scrapy簡(jiǎn)單易用、靈活易拓展、開(kāi)發(fā)社區(qū)活躍,并且是跨平臺(tái)的.在Linux、MaxOS以及windows平臺(tái)都可以使用,需要的朋友可以參考下
    2021-06-06
  • python利用不到一百行代碼實(shí)現(xiàn)一個(gè)小siri

    python利用不到一百行代碼實(shí)現(xiàn)一個(gè)小siri

    這篇文章主要介紹了關(guān)于python利用不到一百行代碼實(shí)現(xiàn)了一個(gè)小siri的相關(guān)資料,文中介紹的很詳細(xì),對(duì)大家具有一定的參考借鑒價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Python實(shí)現(xiàn)大文件排序的方法

    Python實(shí)現(xiàn)大文件排序的方法

    這篇文章主要介紹了Python大文件排序的方法,涉及Python針對(duì)文件、緩存及日期等操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 快速解決jupyter notebook啟動(dòng)需要密碼的問(wèn)題

    快速解決jupyter notebook啟動(dòng)需要密碼的問(wèn)題

    這篇文章主要介紹了快速解決jupyter notebook啟動(dòng)需要密碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python實(shí)現(xiàn)AES加密解密

    python實(shí)現(xiàn)AES加密解密

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)AES加密解密的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python遠(yuǎn)程連接服務(wù)器MySQL數(shù)據(jù)庫(kù)

    python遠(yuǎn)程連接服務(wù)器MySQL數(shù)據(jù)庫(kù)

    這篇文章主要為大家詳細(xì)介紹了python遠(yuǎn)程連接服務(wù)器MySQL數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評(píng)論