Python linecache 模块提取固定格式文本数据实战

山间有风
山间有风
发布时间:2026-10-11| 2人浏览过
原创

本文介绍如何使用 Python 的 linecache 模块高效处理固定格式的文本数据。通过遍历目录获取文件列表,利用 linecache.getlines() 读取指定行内容,并结合行数判断逻辑,从结构化的报文文件中精准提取匹配分值(matchRatio)或标记未命中状态。该方法适用于日志分析、批量文件处理等场景,代码示例展示了从路径拼接、行数统计到字符串切片提取的完整流程。

linecache 处理固定格式文本数据

在处理大量结构化的日志或报文文件时,直接打开文件读取所有行可能会消耗较多内存。Python 标准库中的 linecache 模块提供了一种缓存机制,适合用于处理固定格式的文本数据。它可以按需读取文件的特定行,特别适用于从报文中提取特定位置的信息,例如计算得分或匹配率。

从报文提取得分的实现逻辑

以下代码演示了如何遍历指定目录下的所有文件,并提取其中的关键信息。核心逻辑包括获取文件行数、读取特定行内容,并根据行数是否达到阈值来决定提取哪个字段的值。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
''''提取result结果分值'''
 
import linecache
import os
import os.path
 
rootdir = r"./815old/"
 
for parent, dirnames, filenames in os.walk(rootdir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
  for filename in filenames: # 输出文件信息
    files = os.path.join(parent, filename) # 输出文件路径信息
    count = len(open(files, 'r').readlines()) # 行数
    str = linecache.getlines(files) # 所有文件的字符串
    filename = str[2] #第三行
    if count > 6: # 行数大于5行表示命中
      matchRatio = str[8] #第九行
      print filename[58:-2], " ", matchRatio[15:], "\r"
    else: # 没有命中 matchRatio 赋值0
      print filename[58:-2], " ", '0', "\r"

在上述代码中,os.walk() 用于递归遍历 rootdir 目录。对于每个文件,首先通过 open(files, 'r').readlines() 获取总行数 count。接着使用 linecache.getlines(files) 获取文件的所有行内容列表。代码逻辑判断如果行数大于 6(即至少有 7 行,索引 0-6),则认为命中,提取第 9 行(索引 8)的 matchRatio;否则视为未命中,输出 '0'。最后通过字符串切片 [58:-2] 和 [15:] 提取具体的文件名和分值部分。

报文数据结构示例

为了理解上述代码提取的数据来源,可以参考以下典型的报文结构。这种格式通常包含文件 ID、文件名、类型以及匹配结果等字段。

results {
 fileID: "386e86d2e3991de32a028b7e26e58ffd"
 filename: "/opt/vfpgen/video_file/192.168.142.199/video/Avatar.2009.iTALiAN.READNFO.LD.TS.XviD-SiLENT.CD1[S.o.M.].avi"
 filetype: 1
 vfpQueryResults {
  fileID: "09b509f6c625aeb525f6f1c8e09725d6"
  filename: "/opt/SmartVision/system/copyrightfpdb//dbfp/09b509f6c625aeb525f6f1c8e09725d6.DB.cdvs"
  matchScore: 0.85874754
  matchRatio: 0.53333336
  dbID: "copyright_library_db"
  startframe: 16210
  endframe: 97240
 }
}

该报文结构展示了嵌套的对象,其中 vfpQueryResults 包含了具体的匹配得分(matchScore)和匹配比率(matchRatio)。在实际的文件处理中,如果文件内容以这种固定格式存储,linecache 模块可以高效地定位到包含 matchRatio 的行,从而提取出所需的数值。

以上就是 Python linecache 处理固定格式文本数据的详细内容,更多关于 Python 文件处理与报文解析的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。