問題:有一個比較大的文件,從幾M到1G,如何快速獲取其中的某一行?
解決方式:
如下,采用for in文件迭代器的方式,在加一個行計數器即可。禁止采用f.readline()的方式,readline效率極其低下,readlines對內存消耗過大。
def fn(which_line): f = open("abc.txt", "rt") counter = 0 for line in f: counter += 1 if which_line == counter: print("find this line:{}".format(line)) break
問題:python讀取文件時,如何判斷文件是否到了末尾?
解決方式:
1)判斷line的內容是否為空,即 if line == "", 則認為已經到了文件末尾,原因是空格實際也存在換行符。
2)捕獲特定異常StopIteration。原因是在遍歷的時候,我們不知道什么時候會跳出循環,
跳出循環后,我們可以給循環外部加一個 next(f) 語句,用異常捕獲語句處理此行代碼,如果捕獲到了,則說明肯定到了文件末尾
def fn(): f = open("abc.txt", "rt") for line in f: print(line) try: next(f) # 此處前后可加其他處理語句 except StopIteration: is_file_end = True except Exception as e: pass finally: if f: f.close() do something else
注意: StopIteration捕獲語句必須在Exception之前,因為StopIteration繼承了Exception
