0

0

Python 文件搜索优化:提升大规模数据处理效率

聖光之護

聖光之護

发布时间:2025-07-28 22:04:13

|

723人浏览过

|

来源于php中文网

原创

python 文件搜索优化:提升大规模数据处理效率

本文针对 Python 中文件搜索效率问题,提供了一种基于正则表达式和集合运算的优化方案。该方案通过一次遍历文件,同时搜索多个目标 ID,显著提升了在大规模数据集中查找特定 ID 的效率。文章详细讲解了代码实现,并对比了不同方案的性能差异,旨在帮助开发者优化文件搜索方法,提高数据处理效率。

在处理包含大量数据的文本文件时,高效的文件搜索方法至关重要。原始代码通过逐行读取文件,并在每行中查找特定 ID,效率较低。特别是当需要搜索多个 ID 时,多次遍历文件会显著降低性能。本文介绍一种优化的方法,该方法使用正则表达式和集合运算,可以在一次文件遍历中搜索多个 ID,从而提高搜索效率。

优化方案:正则表达式与集合运算

该优化方案的核心在于使用正则表达式提取每行中的所有 ID,并使用集合运算快速判断目标 ID 是否存在于该行中。

立即学习Python免费学习笔记(深入)”;

import re
from collections import defaultdict


def tid_searcher(filename, tids_of_interest):
    """
    在文件中搜索指定的TID,并返回包含这些TID的行号。

    Args:
        filename (str): 要搜索的文件名。
        tids_of_interest (set): 包含要搜索的TID的集合。

    Returns:
        defaultdict(list): 一个字典,其中键是TID,值是包含该TID的行号列表。
    """
    res = defaultdict(list)
    with open(filename, 'r') as src:
        for line in src:
            # 使用正则表达式提取行中的所有TID
            line_tids = set(re.findall(r'(\d+):', line))  # re:  group of one or more digits followed by colon
            # 使用集合交集查找目标TID
            hits = tids_of_interest & line_tids  # set intersection
            if hits:
                # 使用正则表达式提取行号
                line_no = re.search(r'\A\d+', line).group(0)  # re: one or more digits at start of string
                for hit in hits:
                    res[hit].append(line_no)

    return res


# 示例用法
tids_of_interest = {'268', '271'}
filename = 'data.txt'  # 替换为你的文件名

print(tid_searcher(filename, tids_of_interest))

# 输出示例:
# defaultdict(, {'268': ['5168', '5169'], '271': ['5169']})

代码详解:

ShopNum1网店系统
ShopNum1网店系统

ShopNum1拥有强大的网店促销模块,里面就包括商品团购、捆绑销售、品牌专卖、积分换购、优惠券促销、打折促销等众多促销功能,通过合理的组合使用,能帮助商家更好的提高消费者的忠诚度,有效发展新用户,从而带来订单数量的提升。 ShopNum1通过对网店系统软件本身的众多细节优化,有效提升了各主要搜索引擎对其收录的友好程度,从而帮助商家通过搜索引擎带来更多的直接有效客户,以达到提升订单销量的目的。 强

下载
  1. tid_searcher(filename, tids_of_interest) 函数:
    • 接收文件名 filename 和包含目标 ID 的集合 tids_of_interest 作为输入。
    • 使用 defaultdict(list) 创建一个字典 res,用于存储结果。defaultdict 的优点是,当访问不存在的键时,会自动创建一个默认值(在本例中是空列表),避免了 KeyError 异常。
    • 使用 with open(filename, 'r') as src: 打开文件并进行迭代,确保文件在使用后自动关闭。
    • re.findall(r'(\d+):', line): 使用正则表达式 (\d+): 在每一行中查找所有符合模式的字符串。\d+ 匹配一个或多个数字,: 匹配冒号。括号 () 用于捕获匹配的数字(即 TID)。 findall 返回一个包含所有匹配项的列表。
    • tids_of_interest & line_tids: 使用集合交集运算符 & 查找同时存在于 tids_of_interest 和 line_tids 中的元素。 集合运算效率很高,特别适合于大规模数据。
    • re.search(r'\A\d+', line).group(0): 使用正则表达式 \A\d+ 从行首提取行号。 \A 匹配字符串的开头,\d+ 匹配一个或多个数字。 search 返回一个匹配对象,group(0) 返回整个匹配的字符串(即行号)。
    • 将找到的行号添加到 res 字典中对应 TID 的列表中。
    • 返回 res 字典。

性能优势:

  • 减少文件 I/O: 该方案只需一次遍历文件,即可搜索多个 ID,显著减少了文件 I/O 操作。
  • 高效的字符串匹配: 正则表达式引擎针对字符串匹配进行了优化,比手动遍历字符更高效。
  • 快速的集合运算: 集合运算(如交集)在 Python 中进行了高度优化,比列表操作更快。

注意事项:

  • 正则表达式的性能: 虽然正则表达式通常很快,但复杂的正则表达式可能会降低性能。 确保你的正则表达式尽可能简单和精确。
  • 内存占用 对于非常大的文件,将所有行号存储在内存中可能会导致内存问题。 如果遇到这种情况,可以考虑使用生成器或将结果写入磁盘。
  • 文件编码: 确保以正确的编码方式打开文件。 默认情况下,Python 使用 UTF-8 编码。 如果你的文件使用不同的编码,请在 open() 函数中指定编码方式,例如 open(filename, 'r', encoding='latin-1')。

总结:

通过使用正则表达式和集合运算,可以显著提高 Python 中文件搜索的效率。 该方案特别适用于需要在大规模数据集中搜索多个 ID 的场景。 记住,在优化代码时,始终要考虑性能和内存占用之间的权衡。 通过选择合适的算法和数据结构,可以编写出高效且可扩展的 Python 代码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

512

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

251

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

745

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

214

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

236

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

532

2023.12.06

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号