`

Python低内耗读取文件的二分查找单词

阅读更多

 

问题描述:有一个有序的单词文件如下图

 

要求写一个查找功能(防止文件过大时占用内存,建议文件不要一次全部读入内存)

使用二分查找法,输出匹配的结果

例如   输入>>   dis

          输出>>   disadvantage         n. 不利,不利条件,损害,损失
                        discussion         n. 讨论; v. 讨论,商议

 

环境工具:CentOS6.3  Python2.6

 

解决过程:1. 首先要考虑不能一次将文件全部读入内存,而且单词的内容是一行行的,那么就考虑如何在不读入全部文件到内存的情况下,直接读文件的第几行

python 的文件操作里面有

seek函数动态定义文件指针的位置(从哪里开始读)

tell函数报告文件指针的位置(受seek、readline、read、readlines影响

在一个单词文件比较规范的情况下,用seek、tell配合readline就可以直接读取文件的特定一行到内存

代码片段如下

    startIndexList = []  #单词在文件的起始位置指针列表
    startIndexList.append(0)    #第一个单词的是0
    while self.fp.readline():  #一行行的读取文件,并记录单词的起始位置指针
        startIndexList.append(self.fp.tell()) #tell()报告当前位置指针
    del startIndexList[-1]  #去掉文末指针

 

                  2. 关于二分查找法,就是在有序序列中,不断的取中间元素做比较,进行查找,能较大提高效率,涉及到Python的字符串匹配(in关键字)和字符串比较(cmp函数)

 代码片段如下

def findword(self, wordSourceList):
    if(len(wordSourceList) == 1):  #源单词列表只有一个单词
        self.fp.seek(wordSourceList[0],0)  #找到相应位置的单词的起始位置
        wordSource = self.fp.readline().strip('\n')  #读取相应元素的单词
        if self.wordTarget in wordSource:  #模糊匹配成功,加入搜索结果列表
        self.resultList.append(wordSource)
    elif(len(wordSourceList) == 2):  #源单词列表有两个单词
        self.fp.seek(wordSourceList[0],0)  #找到相应位置的单词的起始位置
        wordSource = self.fp.readline().strip('\n')  #读取相应元素的单词
        if self.wordTarget in wordSource:  #模糊匹配成功,加入搜索结果列表
        self.resultList.append(wordSource)
        self.fp.seek(wordSourceList[indexList[1]],0)
        wordSource = self.fp.readline().strip('\n')
        if self.wordTarget in wordSource:
        self.resultList.append(wordSource)
    else:  #源单词列表三个及以上的单词
        self.fp.seek(wordSourceList[len(wordSourceList)/2],0)  #找到中间位置的单词的起始位置
        wordSource = self.fp.readline().strip('\n')  #读取中间位置的单词
        if self.wordTarget in wordSource:  #模糊匹配成功,加入搜索结果列表
        self.resultList.append(wordSource)
        if cmp(self.wordTarget, wordSource) == -1:  #中间位置的单词和目标单词比较,目标单词可能在小的单词序列中
        wordSourceListSmall = wordSourceList[0:len(wordSourceList)/2]
        self.findword(wordSourceListSmall)
        else:  #中间位置的单词和目标单词比较,目标单词可能在大的单词序列中
        wordSourceListBig = wordSourceList[(len(wordSourceList)/2)+1:len(wordSourceList)]
        self.findword(wordSourceListBig)

 

                 3. 如入dis查找结果如下图,源码见findword.py

  • 大小: 55.3 KB
  • 大小: 8.5 KB
分享到:
评论

相关推荐

    python3读取cad.docx

    二、 Python 读取 CAD 文件的步骤 读取 CAD 文件的步骤可以分为以下几个步骤: 1. 安装 pyautocad 库:使用 pip 安装 pyautocad 库,命令为 pip install pyautocad。 2. 导入 pyautocad 库:在 Python 代码中导入 ...

    Python实现读取Properties配置文件的方法

    本篇文章将详细探讨如何通过Python来读取并解析`.properties`配置文件。 首先,了解`.properties`文件的格式。这种文件通常用于存储配置信息,其中键值对以等号`=`分隔,每一行代表一个键值对,注释以`#`或`!`开始...

    python读取文本文件实现猜单词

    python读取文本文件实现猜单词实现: 1、计算机必须从文本文件 gone with the wind.txt 中随机选择一个单词命名为 secretWord,单词可能包含大写和小写字母,为降低猜测难度,需要将单词转换为全部小写字母。 2、...

    PYTHON读取文件测试

    在Python编程语言中,读取和处理文件是基础且至关重要的技能。本示例着重讲解如何使用Python来读取TXT文本文件并进行内容解析。在实际应用中,这可能包括日志分析、数据处理或者简单的文本操作。我们将通过具体的...

    python 文件夹文件读取

    通过这些知识点的学习,你可以更好地理解如何在Python中操作文件和目录,包括获取目录下的所有文件、读取文件内容并进行相应的处理等。在实际开发中,这些操作非常常见,掌握它们将大大提高编程效率。同时,需要注意...

    Python实现读取txt文件中的数据并绘制出图形操作示例

    本示例主要讲解如何使用Python读取txt文件中的数据,并利用这些数据绘制图形。在Python中,读取txt文件通常涉及`open()`函数和文件处理模式,而绘图则可能需要第三方库如matplotlib。 首先,我们来探讨如何从txt...

    Python实现读取txt文件并转换为excel的方法示例

    本文实例讲述了Python实现读取txt文件并转换为excel的方法。分享给大家供大家参考,具体如下: 这里的txt文件内容格式为: 892天平天国定都在?A开封B南京C北京(B) Python代码如下: # coding=utf-8 ''''' main...

    python读取excel文件例子

    Python提供了多个库来方便地读取和写入Excel文件,其中最常用的是`pandas`库和`openpyxl`库。本例子将重点介绍如何使用Python通过`pandas`库来读取Excel文件。 首先,`pandas`是一个强大的数据处理库,它提供了...

    python读取csv文件方法

    python读取csv文件 要在Python中读取CSV文件,可以使用内置的csv模块或者使用pandas库

    python实现读取文件目录并存储到lst文件中

    功能: 1.判断文件所在的文件夹是否存在,不存在则...2.读取文件夹下的所有文件,可以控制是否返回文件的名字,不带后缀; 3.将所有文件的目录存储到指定的lst文件中; 4.读取lst文件中的路径,即将路径加载到列表中。

    python读取scel文件_爬虫_搜狗_

    在Python编程领域,读取和处理数据是常见的任务之一,特别是在进行网络爬虫项目时。本文将详细探讨如何使用Python来解析搜狗细胞词库(SCEL)文件,并将其转换为TXT文档,以便进一步分析和利用词库信息。 首先,...

    python读取文件转换为csv

    使用python语言读取txt文本,根据分隔符判断,进行数据转换。适用于一个文本需要根据某个字段分隔多个文件的情况

    getFileHead.py(用于读取文件头信息的python脚本)

    用于读取文件头信息的python脚本。

    python读取ini配置文件过程示范

    Python标准库中的configparser模块为开发者提供了读取和写入INI格式配置文件的能力。 在本文中,我们将详细介绍如何使用Python来读取INI配置文件。首先,我们会解释什么是INI文件以及为什么它们在配置管理中很有用...

    Python处理S19文件

    在这个过程中,`IntelHex`库被用来读取和处理二进制文件,而`srec_writer`库则用于将Intel HEX对象转换为SREC格式的字符串。 通过以上方法,你可以用Python有效地处理S19文件,无论是解析还是生成,都能满足需求。...

    python 读取shp文件

    Reading and writing vector data with OGR

    python读取las数据.zip

    本话题聚焦于如何使用Python来读取和处理LAS点云数据,并实现三维可视化。 LAS是一种通用的点云数据格式,由美国国家地理空间标准化组织(ASPRS)制定,用于存储包括XYZ坐标、颜色、强度、分类等在内的多种属性信息...

    Python 如何对读取的文件内容进行分词 Python源码

    Python 如何对读取的文件内容进行分词 Python源码Python 如何对读取的文件内容进行分词 Python源码Python 如何对读取的文件内容进行分词 Python源码Python 如何对读取的文件内容进行分词 Python源码Python 如何对...

    python读取各种文件数据方法解析

    ### Python读取各种文件数据方法解析 在Python编程中,经常需要从不同类型的文件中读取数据并进行处理。本文将详细介绍如何使用Python读取文本文件(包括`.txt`和`.log`)、XML文件(`.xml`)以及Excel文件(`.xlsx...

Global site tag (gtag.js) - Google Analytics