尝试编写一段代码,用于搜索特定字符串(由用户输入)的散列值,如果该行中存在searchquery,则返回散列值。
这样做只是为了多学一点python,但它可能是HR部门使用的真实应用程序,用于在.csv简历数据库中搜索每个简历中的特定单词。
我想让这个程序浏览一个每行有三个条目(id#;applicant名称;简历文本)的.csv文件。
我将其设置为创建一个散列,然后为简历文本散列条目创建一个字符串,并尝试使用.find()函数返回每个实例的整个散列。
我想要的是,如果单词"gpa“被用作搜索查询,并且在”简历文本“中找到了三个申请者( .csv文件中的行),那么它将打印包含它的每一行的id、姓名和简历。(所有三个申请者)
现在,我的程序打印.csv文件中的第一行(打印简历‘is’,简历‘’name‘,简历’resumetext‘),不管搜索查询是什么,不管它是否在简历文本中。
最后,有没有更好的方法来做到这一点,通过使用python在文件夹中搜索word文档、pdf和.txt文件中的特定单词(我刚刚开始阅读有关re模块的内容,我想知道这是不是比将所有内容都放在.csv文件中更好的方法)。
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']发布于 2010-05-13 12:52:54
这条线
resumetext = str(s['resumetext'])是多余的,因为s['resumetext']已经是一个字符串(因为它是.split调用的结果之一)。因此,您可以将此行和下一行合并到
if id2find in s['resumetext']: ...下面的else没有对齐--像这样放置,您会一遍又一遍地打印消息。您希望将它放在for循环之后(并且else是不需要的,尽管它可以工作),所以我建议:
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的另一种方法,尽管你的方法也很好。
发布于 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的显式强制转换,因为它是不需要的。
发布于 2010-05-13 12:29:21
我建议对您的代码进行的一项更改是更改
if resumetext.find(id2find):至
if resumetext.find(id2find) != -1:因为如果id2find不在简历文本中,则find()返回-1。否则,它返回在简历文本中第一次找到id2find的索引,它可能是0。正如@Personman所评论的那样,这会给出误报,因为-1在Python中被解释为True。
我认为这个问题与find_details()只返回在简历文本中找到搜索字符串的第一个条目有关。将find_details()转换为生成器可能更好,然后您可以遍历它并逐个打印找到的记录。
https://stackoverflow.com/questions/2824360
复制相似问题