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

linecache模塊加載和緩存文件內容詳解

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

linecache模塊

接觸到linecache這個模塊是因為前兩天讀attrs源碼的時候看到內部代碼引用了這個模塊來模擬一個假文件,帶著一臉疑問順便讀了一下這個模塊的源碼,發(fā)現(xiàn)其實也就那么回事兒,代碼不多,在這總結一下。

linecache模塊可以讀取文件并將文件內容緩存起來,方便后面多次讀取。這個模塊原本被設計用來讀取Python模塊的源代碼,所以當一個文件名不在指定路徑下的時候,模塊會通過搜索路徑(search path)來嘗試讀取文件。

接口

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

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

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

linecache.clearcache()

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

linecache.checkcache(filename=None)

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

以下是沒寫進模塊__all__參數(shù)的接口。

linecache.lazycache(filename, module_globals)

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

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

linecache.updatecache(filename, module_globals=None)

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

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

對于懶加載的文件,則調用懶加載時保存的get_source函數(shù)獲取文件內容。

注意:linecache在打開文件之后使用readlines一次性加載所有文件內容,所以在文件很多或者文件太大時會出現(xiàn)問題,所以還是應該謹慎使用。

linecache.getlines(filename, module_globals=None)

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

linecache.cache

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

總結

Python標準庫內置了很多基礎模塊,平時不會注意到,但是總有一些別的代碼會依賴到這些基礎設施,像標準庫里的pdb和traceback都有用到linecache模塊。這里面其實有不少代碼是能加以利用的,平時多多讀源碼,會有驚喜的。

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

相關文章

  • 利用Python寫一場新年煙花秀

    利用Python寫一場新年煙花秀

    這篇文章主要介紹了利用Python寫一場新年煙花秀,可以送給朋友還可以當作練習,Python 模塊包括:tkinter、PIL、time、random、math,下面來看一下代碼實現(xiàn),需要的朋友可以參考一下
    2022-01-01
  • 如何解決Python中tqdm和zip一起用進度條不顯示問題

    如何解決Python中tqdm和zip一起用進度條不顯示問題

    這篇文章主要介紹了如何解決Python中tqdm和zip一起用進度條不顯示問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 使用Python遍歷文件夾實現(xiàn)查找指定文件夾

    使用Python遍歷文件夾實現(xiàn)查找指定文件夾

    這篇文章主要為大家介紹了如何使用Python遍歷文件夾從而實現(xiàn)查找指定文件夾下所有相同名稱的文件、所有相同后綴名的文件,感興趣的可以了解一下
    2022-07-07
  • python socket網(wǎng)絡編程之粘包問題詳解

    python socket網(wǎng)絡編程之粘包問題詳解

    這篇文章主要介紹了python socket網(wǎng)絡編程之粘包問題詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Numpy中的數(shù)組搜索中np.where方法詳細介紹

    Numpy中的數(shù)組搜索中np.where方法詳細介紹

    這篇文章主要介紹了Numpy中的數(shù)組搜索中np.where方法詳細介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • python文件和目錄操作函數(shù)小結

    python文件和目錄操作函數(shù)小結

    這篇文章主要介紹了python文件和目錄操作函數(shù)小結,主要涉及到os模塊和shutil模塊的一些方法,需要的朋友可以參考下
    2014-07-07
  • Python利用itchat模塊定時給朋友發(fā)送微信信息

    Python利用itchat模塊定時給朋友發(fā)送微信信息

    這篇文章主要介紹了在Python中利用itchat模塊編寫一個爬蟲腳本,可以實現(xiàn)每天定時給朋友發(fā)微信暖心話,感興趣的可以跟隨小編一起學習一下
    2022-01-01
  • Python編輯器Pycharm安裝配置超詳細教程

    Python編輯器Pycharm安裝配置超詳細教程

    PyCharm是一款功能強大的Python編輯器,具有跨平臺性,下面這篇文章主要給大家介紹了關于Python編輯器Pycharm安裝配置的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • python中數(shù)組array和列表list的基本用法及區(qū)別解析

    python中數(shù)組array和列表list的基本用法及區(qū)別解析

    大家都知道數(shù)組array是同類型數(shù)據(jù)的有限集合,列表list是一系列按特定順序排列的元素組成,可以將任何數(shù)據(jù)放入列表,且其中元素之間沒有任何關系,本文介紹python中數(shù)組array和列表list的基本用法及區(qū)別,感興趣的朋友一起看看吧
    2022-05-05
  • PyTorch的安裝與使用示例詳解

    PyTorch的安裝與使用示例詳解

    本文介紹了熱門AI框架PyTorch的conda安裝方案,與簡單的自動微分示例,并順帶講解了一下PyTorch開源Github倉庫中的兩個Issue內容,需要的朋友可以參考下
    2024-05-05

最新評論

江津市| 六枝特区| 德阳市| 沾益县| 商南县| 公主岭市| 霍州市| 密云县| 湄潭县| 嘉鱼县| 文化| 丰台区| 牟定县| 长岭县| 永兴县| 含山县| 平原县| 郸城县| 武安市| 紫金县| 兴业县| 麻江县| 鄂托克前旗| 永胜县| 嘉黎县| 方正县| 青海省| 宜昌市| 渑池县| 乳源| 昌图县| 广饶县| 额尔古纳市| 乐都县| 马龙县| 肇源县| 阳原县| 南华县| 宁武县| 陕西省| 孝义市|