python读取文件_python这么受欢迎,你知道如何以正确的方式来读取文件内容吗
前言
對于互聯網的開發人員來說,讀取寫入文件幾乎是代碼中常見的一種操作。但是經常性的打開關閉文件,浪費資源不說,當文件大的時候讀取的效率也不高。所以今天我們一起看一個便捷的模塊linecache。linecache顧名思義,就是從內存中讀取指定文件的第幾行。本文接下來會從三個方面來介紹這個模塊,相信大家讀了之后會有一定的知識收獲
- linecache如何使用
- linecache的源碼分析
- 對于這個模塊的一些思考和總結
注:本文所說的linecache是針對于python這門語言中自帶的一個模塊
linecache如何使用
了解python語法的讀者應該知道,我們在使用一個模塊的時候,首先需要把它導入程序中。
1.import linecache
2.from linecache import *
第一種和第二種導入模塊的方法效果是一樣的,具體我們來看看,linecache模塊一共有三個功能函數getline(讀取文件的某一行),clearcache(清空已經讀到內存的文件cache),checkcache(檢查丟掉其中過期的一些cache)。我們重點來看下getline這個函數。舉個例子,假如我們有一個bytedance.txt文件,文件內容如下:
1.welcome to bytedance
2.*********************
3.welcome to toutiao
我們想要獲取第三行的內容,如果程序中使用的是第一種模塊導入的方式,那么可以通過linecache.getline("bytedance.txt",3)來直接獲取文件第三行的內容。如果使用了第二種模塊導入的方式,那么就是getline("bytedance.txt",3)
linecache的源碼分析
這一塊讓我們具體來看下源碼的內容,源碼是怎樣實現這些功能的函數呢?
__all__ = ["getline", "clearcache", "checkcache"]
首先源碼中寫明了這個模塊可以導入的功能函數有三個,對于__all__這個屬性,用來表明這個模塊中的哪些函數可以被外部程序導入。
def getline(filename, lineno, module_globals=None):
lines = getlines(filename, module_globals)
if 1 <= lineno <= len(lines):
return lines[lineno-1]
else:
return ''
我們先來看下getline這個函數,這個函數就是傳入文件名稱,第幾行這兩個參數。然后根據lineno獲取lines的第(lineno-1)個元素,也就是我們想要讀取的目標行。
注:程序中默認從0開始計數,所以讀取lineno行,其實就是獲取lines[lineno-1]
def getlines(filename, module_globals=None):
"""Get the lines for a file from the cache.
Update the cache if it doesn't contain an entry for this file already."""
if filename in cache:
return cache[filename][2]
try:
return updatecache(filename, module_globals)
except MemoryError:
clearcache()
return []
getline先是調用getlines這個函數獲取文件的所有內容。那么getlines這個函數又做了哪些邏輯處理呢?兩個方面,假如讀取的這個文件已經存在cache內存中,那么就返回內存中的文件內容。如果cache中之前沒有讀取這個文件,那么就需要調用updatecache這個函數重新讀取這個文件。也就是以下這部分代碼
try:
with open(fullname, 'rU') as fp:
lines = fp.readlines()
except IOError:
return []
對于這個模塊的一些思考和總結
linecache本質上就是預讀,讀取一次文件,然后將讀取到的內容和文件名稱作為鍵值對寫入字典中,之后程序在需要讀取文件內容的時候,就不用重新打開文件讀取內容了,可以直接從存儲在內存的字典中獲取想要的文件內容,非常的方便。那么當文件很大,達到幾百MB或者達到G級別的時候,將整個文件讀取到內存中是否合適,這個時候開銷會怎樣呢。毫無疑問,文件特別大的時候,一次性讀入內存的開銷是很大的,如果不需要頻繁的讀取文件,那么不建議將大文件直接一次性的讀取到內存中。具體需要怎樣去使用,還是需要貼合我們業務場景來決定。
總結
以上是生活随笔為你收集整理的python读取文件_python这么受欢迎,你知道如何以正确的方式来读取文件内容吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云服务器怎么选系统,云服务器怎么选择操作
- 下一篇: 8.0强行转换后变成了7_【建筑通】钻孔