问题描述:有一个有序的单词文件如下图
要求写一个查找功能(防止文件过大时占用内存,建议文件不要一次全部读入内存)
使用二分查找法,输出匹配的结果
例如 输入>> 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
相关推荐
主要介绍了Python实现读取Properties配置文件的方法,结合实例形式分析了Python读取Properties配置文件类的定义与使用相关操作技巧,需要的朋友可以参考下
提供简单python读取xml方式,适用于简单xml文件读取功能
python读取文本文件实现猜单词实现: 1、计算机必须从文本文件 gone with the wind.txt 中随机选择一个单词命名为 secretWord,单词可能包含大写和小写字母,为降低猜测难度,需要将单词转换为全部小写字母。 2、...
主要介绍了python3 循环读取excel文件并写入json操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
opencv可以读取的图片类型比较多,但大多是比较常见的类型,比如”.jpg”和”.png”,但它不能直接读取YUV格式的文件,需要通过python读取YUV文件,并进行相应的转换后,才能被opencv读取,并进行后续相应的处理. ...
python 读取文件中的文件,并对每个文件进行读取的方法
本文实例讲述了Python实现读取文件最后n行的方法。分享给大家供大家参考,具体如下: # -*- coding:utf8-*- import os import time import datetime import math import string def get_last_line(inputfile) : ...
本文实例讲述了Python实现读取txt文件并转换为excel的方法。分享给大家供大家参考,具体如下: 这里的txt文件内容格式为: 892天平天国定都在?A开封B南京C北京(B) Python代码如下: # coding=utf-8 ''''' main...
主要介绍了Python实现读取txt文件中的数据并绘制出图形操作,涉及Python文件读取、数值运算及基于pylab库的图形绘制相关操作技巧,需要的朋友可以参考下
python读取csv文件 要在Python中读取CSV文件,可以使用内置的csv模块或者使用pandas库
使用Python3实现非递归的二分查找算法,资源中包含具体实现代码与单元测试代码,已进行代码重构,代码风格整洁易读
这是一个python读取excel文件例子,里面配有python文件、python文件生成的exe,并有MFC界面调取exe文件
纯python3环境读取cad文件详细说明pdf
Python实现读取和创建文件,Python实现读取和创建文件,Python实现读取和创建文件,Python实现读取和创建文件,Python实现读取和创建文件。
使用python语言读取txt文本,根据分隔符判断,进行数据转换。适用于一个文本需要根据某个字段分隔多个文件的情况
用于读取文件头信息的python脚本。
只要改变代码的数据文件路径,无论上千上万个数据文件,一次运行即可机器处理。 Python批量读取modis的hdf文件转asc文件,修改文件夹即可,自动创建子文件夹生产结果到子文件夹。
python方法.Python读写文件方法读取各种类型文件
功能: 1.判断文件所在的文件夹是否存在,不存在则...2.读取文件夹下的所有文件,可以控制是否返回文件的名字,不带后缀; 3.将所有文件的目录存储到指定的lst文件中; 4.读取lst文件中的路径,即将路径加载到列表中。