使用linecache模塊怎么緩存文件?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
linecache模塊
接觸到linecache這個模塊是因為前兩天讀attrs源碼的時候看到內部代碼引用了這個模塊來模擬一個假文件,帶著一臉疑問順便讀了一下這個模塊的源碼,發現其實也就那么回事兒,代碼不多,在這總結一下。
linecache模塊可以讀取文件并將文件內容緩存起來,方便后面多次讀取。這個模塊原本被設計用來讀取Python模塊的源代碼,所以當一個文件名不在指定路徑下的時候,模塊會通過搜索路徑(search path)來嘗試讀取文件。
接口
linecache模塊的__all__參數其實只提供了getline/clearcache/checkcache三個接口,但實際上可以使用的不止這些,下面我會對所有接口逐個進行介紹。
linecache.getline(filename, lineno, module_globals=None)
獲取指定文件的某一行,filename指定文件名、lineno指定行號、module_globals用于指定模塊的上下文我也不知道怎么稱呼,姑且稱為上下文吧,最后一個參數其實到會傳到linecache.updatecache()里,用于嘗試使用__loader__加載文件,一般情況下不會用到最后一個參數,忽略即可。當行號小于一或大于文件大行號時函數直接返回空字符串。
linecache.clearcache()
清空所有緩存,注意是所有。
linecache.checkcache(filename=None)
這個函數用于檢查緩存,如果文件的大小或者修改時間有變化,會把文件原先的緩存刪除,如果文件是懶加載的則保持不變。當filename為None時檢查緩存中的所有文件。
以下是沒寫進模塊__all__參數的接口。
linecache.lazycache(filename, module_globals)
對指定文件使用懶加載,啟用懶加載成功的文件會在實際調用獲取內容的接口時才將文件內容加載進內存,使用這個可以避免多余的文件IO。返回值為一個布爾值,當懶加載成功時返回True,如果文件內容已經實際加載進內存或者加載失敗則返回False。
這個函數的module_globals參數是必填的,其實就是傳入要加載文件對應模塊的上下文。比如加載linecache模塊,則傳入linecache.__dict__或者vars(linecache)(目前只想到這兩種方法,當然你要自己構建一個字典傳進去也是可以的)。然后函數會根據上下文獲取__loader__的get_source函數保存到緩存中。這個函數是在Python3.5后新增的。
linecache.updatecache(filename, module_globals=None)
這個函數是整個模塊的核心,用于更新文件緩存并返回文件內容。函數中間任何一個環節出錯了會返回一個空列表。
對于普通文件,內部使用tokenize.open()函數用于打開文件,檢測文件的編碼并使用檢測到的編碼打開文件,如果缺失編碼默認使用UTF-8。如果給定路徑無法打開文件則使用sys.path指定的路徑嘗試加載。如果文件內容的最后一行不帶\n,會自動在最后一個字符加上\n。
對于懶加載的文件,則調用懶加載時保存的get_source函數獲取文件內容。
注意:linecache在打開文件之后使用readlines一次性加載所有文件內容,所以在文件很多或者文件太大時會出現問題,所以還是應該謹慎使用。
linecache.getlines(filename, module_globals=None)
獲取文件所有內容,如果文件尚未加載或者是懶加載,會調用linecache.updatecache()加載文件內容,如果出現MemoryError則清空緩存。linecache.getline()其實內部就是調用了這個函數。
linecache.cache
這是一個字典,所有文件的緩存就存在這里面。字典的Key是你讀取時傳入的filename,Value是一個保存了文件大小、修改時間、內容、名字的元組,當文件為懶加載時則是對應__loader__的get_source函數。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯成都網站設計公司行業資訊頻道,感謝您對創新互聯成都網站設計公司的支持。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、網站設計器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞標題:使用linecache模塊怎么緩存文件-創新互聯
文章來源:http://vcdvsql.cn/article8/ddjoip.html
成都網站建設公司_創新互聯,為您提供動態網站、網站設計公司、做網站、網站導航、App開發、用戶體驗
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯