歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python linecache模塊

Python linecache模塊

日期:2017/3/1 9:08:53   编辑:Linux編程

Table of Contents

  • 1. linecache
    • 1.1. 其它
  • 2. 參考資料

linecache

今天分享一個python的小模塊: linecache, 可以用它方便地獲取某一文件某一行的內容。而且它也被 traceback 模塊用來獲取相關源碼信息來展示。
用法很簡單:

>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'

linecache.getline 第一參數是文件名,第二個參數是行編號。如果文件名不能直接找到的話,會從 sys.path 裡找。

如果請求的行數超過文件行數,函數不會報錯,而是返回''空字符串。
如果文件不存在,函數也不會報錯,也返回''空字符串。

linecache 會嘗試用緩存一些信息來優化對文件的讀取。它還提供了兩個方法來處理緩存相關。

linecache.clearcache()   # 清除不再需要的linecache.getcache()獲取的內容

linecache.checkcache([filename])  # 檢查文件在硬盤上是否有更新,如果有更新緩存。
                                  # 如果沒有提供文件名參數,則檢查linecache緩存裡所有的條目

其它

當文件很大而只要讀取其中一行時,如果采用linecache成為程序的瓶頸,也可以采用如下方法來獲得速度上一些提升:

def get_line(thefilepath, desired_line_number):
    if desired_line_number < 1: return ''
    for current_line_number, line in enumerate(open(thefilepath, 'rU')):
        if current_line_number == desired_line_number -1:
            return line
    return ''

ps: 打開文件的方式'rU'是以一種windows,mac,unix三個平台同一的方式打開,都讀取成 \n, 參照這裡。

參考資料

  • https://docs.python.org/2/library/linecache.html
  • 《Python Cookbook》Chapter2.4

Copyright © Linux教程網 All Rights Reserved