Python之linecache模块的使用

linecache模块的作用:

  缓存的实现将文件的内容保存在内存中,这些内容被解析为单独的行。API通过在列表中建立索引来返回请求的行,并且节省了反复读取文件和解析行以找到所需行的时间
这在从同一文件中查找多行时特别有用,例如在为错误报告生成回溯时。

1、准备测试的模块

import os
import tempfile

lorem = '''Lorem ipsum dolor sit amet, consectetuer
adipiscing elit.  Vivamus eget elit. In posuere mi non
risus. Mauris id quam posuere lectus sollicitudin
varius. Praesent at mi. Nunc eu velit. Sed augue massa,
fermentum id, nonummy a, nonummy sit amet, ligula. Curabitur
eros pede, egestas at, ultricies ac, apellentesque eu,
tellus.

Sed sed odio sed mi luctus mollis. Integer et nulla ac augue
convallis accumsan. Ut felis. Donec lectus sapien, elementum
nec, condimentum ac, interdum non, tellus. Aenean viverra,
mauris vehicula semper porttitor, ipsum odio consectetuer
lorem, ac imperdiet eros odio a sapien. Nulla mauris tellus,
aliquam non, egestas a, nonummy et, erat. Vivamus sagittis
porttitor eros.'''


def make_tempfile():
    """创建临时的文件"""
    fd, temp_file_name = tempfile.mkstemp()
    os.close(fd)
    with open(temp_file_name, 'wt') as f:
        f.write(lorem)
    return temp_file_name


def cleanup(filename):
    """删除文件"""
    os.unlink(filename)
linecache_data.py

2、获取指定的行数据

import linecache
from lidecache_data import *

filename = make_tempfile()

print('数据源')
print('{!r}'.format(lorem.split('\n')[4]))
print('内存缓存')
print('{!r}'.format(linecache.getline(filename, 5)))
cleanup(filename)
linecache_getline.py

运行效果

数据源:
'fermentum id, nonummy a, nonummy sit amet, ligula. Curabitur'

内存的缓存:
'fermentum id, nonummy a, nonummy sit amet, ligula. Curabitur\n'

 3、获取文本的回车行

import linecache
from lidecache_data import *

filename = make_tempfile()

print('{!r}'.format(linecache.getline(filename, 8)))
cleanup(filename)
linecache_empty_line.py

运行效果

'\n'

 4、获取超出行数,返回的结果

import linecache
from lidecache_data import *

filename = make_tempfile()

not_there = linecache.getline(filename, 500)
print('Not There: {!r} 包含 {} 字符'.format(not_there, len(not_there)))
cleanup(filename)
linecache_out_of_range.py

 运行效果

Not There: '' 包含 0 字符

 5、测试文件不存的时,返回的结果

import linecache

not_such_file = linecache.getline('不存在的文件.txt', 1)
print('No File: {!r}'.format(not_such_file))
linecache_missing_file.py

运行效果

No File: ''

6、直接本地读取文本,获取行的数据

import linecache

module_line = linecache.getline('linecache.py', 3)
print('模块:')
print(repr(module_line))

file_src = linecache.__file__
if file_src.endswith('.pyc'):
    file_src = file_src[:-1]
print('\n直接打开文件读取:')
with open(file_src, 'r') as rf:
    file_line = rf.readlines()[2]
print(repr(file_line))
linecache_path_search.py

运行效果

模块:
'This is intended to read lines from modules imported -- hence if a filename\n'

直接打开文件读取:
'This is intended to read lines from modules imported -- hence if a filename\n'
posted @ 2020-04-27 17:50  小粉优化大师  阅读(385)  评论(0编辑  收藏  举报