zoukankan      html  css  js  c++  java
  • python中的linecache 模块

    linecache 模块允许从一个 Python 源文件中获取任意的行,并会尝试使用缓存进行内部优化,常应用于从单个文件读取多行的场合。
    此模块被 traceback 模块用来提取源码行以便包含在格式化的回溯中。

    tokenize.open() 函数被用于打开文件。
    此函数使用 tokenize.detect_encoding() 来获取文件的编码格式;如果未指明编码格式,则默认编码为 UTF-8。

    linecache 模块定义了下列函数:

    linecache.getline(filename, lineno, module_globals=None)
    从名为 filename 的文件中获取 lineno 行,此函数绝不会引发异常 --- 出现错误时它将返回 '' (所有找到的行都将包含换行符作为结束)。
    如果名为 filename 的文件未找到,该函数将在模块搜索路径 sys.path 中查找它,在此之前会先在 module_globals 中检查 PEP 302 __loader__,以涵盖模块是从 zip 文件或其他非文件系统导入源导入的情况。

    linecache.clearcache()
    清空缓存。 如果你不再需要之前使用 getline() 从文件读取的行即可使用此函数。

    linecache.checkcache(filename=None)
    检查缓存有效性。 如果缓存中的文件在磁盘上发生了改变,而你需要更新后的版本即可使用此函数。 如果省略了 filename,它会检查缓存中的所有条目。

    linecache.lazycache(filename, module_globals)
    捕获有关某个非基于文件的模块的足够细节信息,以允许稍后再通过 getline() 来获取其中的行,即使当稍后调用时 module_globals 为 None。 这可以避免在实际需要读取行之前执行 I/O,也不必始终保持模块全局变量。

    3.5 新版功能.

    一个小例子:

    [zhang@python zw]$ cat test.txt 
    1
    2
    3
    4
    5
    6
    7
    8
    9

    脚本:

    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    
    import linecache
    
    file_path = "/zhang/zw/test.txt"
    
    #抓取第二行
    line2 = linecache.getline(file_path, 2).strip()
    print(line2)
    #抓取多行,包左不包右,返回值是一个列表
    mylist=linecache.getlines(file_path)[3:5]
    print(mylist)
    list = [x.strip() for x in mylist if x.strip()]
    print list

    结果:

    2
    ['4
    ', '5
    ']
    ['4', '5']
    天下难事,必作于易;天下大事,必作于细
  • 相关阅读:
    Java 的this和super关键字
    Java关于访问控制权限
    Java 封装 继承 多态
    Java的集成开发工具
    如何查询小程序中的代码量
    小程序中使用echarts及使用的坑
    微信小程序-新的页面授权机制
    前端处理几十万条数据不卡顿(window.requestAnimationFrame)
    Vs code中Eslint 与 Prettier格式化冲突
    从原型与原型链的角度看es6 class
  • 原文地址:https://www.cnblogs.com/hello-wei/p/14751288.html
Copyright © 2011-2022 走看看