首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在哈希值中搜索特定字符串的Python程序《编码帮助》

用于在哈希值中搜索特定字符串的Python程序《编码帮助》
EN

Stack Overflow用户
提问于 2010-05-13 12:09:26
回答 3查看 1.2K关注 0票数 1

尝试编写一段代码,用于搜索特定字符串(由用户输入)的散列值,如果该行中存在searchquery,则返回散列值。

这样做只是为了多学一点python,但它可能是HR部门使用的真实应用程序,用于在.csv简历数据库中搜索每个简历中的特定单词。

我想让这个程序浏览一个每行有三个条目(id#;applicant名称;简历文本)的.csv文件。

我将其设置为创建一个散列,然后为简历文本散列条目创建一个字符串,并尝试使用.find()函数返回每个实例的整个散列。

我想要的是,如果单词"gpa“被用作搜索查询,并且在”简历文本“中找到了三个申请者( .csv文件中的行),那么它将打印包含它的每一行的id、姓名和简历。(所有三个申请者)

现在,我的程序打印.csv文件中的第一行(打印简历‘is’,简历‘’name‘,简历’resumetext‘),不管搜索查询是什么,不管它是否在简历文本中。

最后,有没有更好的方法来做到这一点,通过使用python在文件夹中搜索word文档、pdf和.txt文件中的特定单词(我刚刚开始阅读有关re模块的内容,我想知道这是不是比将所有内容都放在.csv文件中更好的方法)。

代码语言:javascript
复制
def find_details(id2find):
    resumes_f=open("resume_data.csv")
    for each_line in resumes_f:
        s={}
        (s['id'], s['name'], s['resumetext']) = each_line.split(";")
        resumetext = str(s['resumetext'])
        if resumetext.find(id2find):
            return(s)
        else:
            print "No data matches your search query. Please try again"

searchquery = raw_input("please enter your search term")
resume = find_details(searchquery)
if resume:
    print resume['id'], resume['name'], resume['resumetext']
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-13 12:52:54

这条线

代码语言:javascript
复制
resumetext = str(s['resumetext'])

是多余的,因为s['resumetext']已经是一个字符串(因为它是.split调用的结果之一)。因此,您可以将此行和下一行合并到

代码语言:javascript
复制
if id2find in s['resumetext']: ...

下面的else没有对齐--像这样放置,您会一遍又一遍地打印消息。您希望将它放在for循环之后(并且else是不需要的,尽管它可以工作),所以我建议:

代码语言:javascript
复制
for each_line in resumes_f:
    s = dict(zip('id name resumetext'.split(), each_line.split(";"))
    if id2find in s['resumetext']:
        return(s)
print "No data matches your search query. Please try again"

我还展示了构建dict s的另一种方法,尽管你的方法也很好。

票数 1
EN

Stack Overflow用户

发布于 2010-05-13 12:36:43

@Justin Peel说的话。更夸张地说,我会说改变。

if resumetext.find(id2find) != -1:if id2find in resumetext:

还有一些更改:您可能希望比较和用户输入小写,以便与GPA、gpa、Gpa等匹配。您可以通过执行searchquery = raw_input("please enter your search term").lower()resumetext = s['resumetext'].lower()来实现这一点。你会注意到我删除了对s的显式强制转换,因为它是不需要的。

票数 1
EN

Stack Overflow用户

发布于 2010-05-13 12:29:21

我建议对您的代码进行的一项更改是更改

代码语言:javascript
复制
if resumetext.find(id2find):

代码语言:javascript
复制
if resumetext.find(id2find) != -1:

因为如果id2find不在简历文本中,则find()返回-1。否则,它返回在简历文本中第一次找到id2find的索引,它可能是0。正如@Personman所评论的那样,这会给出误报,因为-1在Python中被解释为True。

我认为这个问题与find_details()只返回在简历文本中找到搜索字符串的第一个条目有关。将find_details()转换为生成器可能更好,然后您可以遍历它并逐个打印找到的记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2824360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档