Python 检查嵌套循环中是否存在字符串
我正在写一个函数,试图从简历中提取用户名 大多数情况下,第一行包含用户名,但有时我的学生也会在第一行写简历、简历标题。所以我想忽略这一行,检查下一行Python 检查嵌套循环中是否存在字符串,python,loops,break,Python,Loops,Break,我正在写一个函数,试图从简历中提取用户名 大多数情况下,第一行包含用户名,但有时我的学生也会在第一行写简历、简历标题。所以我想忽略这一行,检查下一行 如果在简历的前四行中没有跳过单词的行,则将其视为人名 def name_extractor(self, text): skip_words = ['CURRICULUM', 'VITAE', 'resume'] text_lines = text.split('\n') name = '' # pdb.set_tra
如果在简历的前四行中没有跳过单词的行,则将其视为人名
def name_extractor(self, text):
skip_words = ['CURRICULUM', 'VITAE', 'resume']
text_lines = text.split('\n')
name = ''
# pdb.set_trace()
for i in range(0,4):
if text_lines[i]:
for word in skip_words:
if word.lower() in text_lines[i]:
break
else:
name = text.split('\n')[i]
# print name
return name
return name
在这里,我试图编写逻辑,但它没有正确工作。如果有第一行作为resume,甚至它给出了resume的名称
如何跳过包含跳过列表中任何单词的起始行并打印正确的名称
非常感谢您在这方面提供的帮助。您的代码没有按预期的方式工作的主要原因是,只要任何一个跳过单词不在文本行中,函数就会返回 你需要的是基础知识方面的帮助,而不是这个问题的答案。尝试将代码粘贴到pythontutor.com中,逐行观察执行情况
- 您的代码没有使用(也不需要)面向对象的方法。当函数
是在def
类中定义的方法时,将使用
参数。在函数定义中从不使用self
,这一事实表明,可以在类定义之外编写常规函数定义。删除self
参数self
- 你不是在比较小写字母。您的代码将硬编码列表的项转换为小写,但文本参数仍保持原样。在
常量中使用小写,并对传递给函数的文本调用skip_words
,而不是对常量调用lower
lower
- 如果遍历列表元素本身,Python代码通常可读性更高。使用变量来表示每个元素,而不是使用计数器来访问列表元素。这也就不需要使用
语句来检查前四行是否存在if
- 通常最好在函数中只使用一个
语句return
将退出break
循环,我认为您打算for
,这将跳过for循环的其余部分并进入下一个迭代继续
def name_extractor(text): skip_words = ['curriculum', 'vitae', 'resume'] text_lines = text.split('\n') for line in text_lines[:4]: line_words = set(line.lower().split(' ')) if not line_words.intersection(skip_words): return line return ''
- 您的代码没有使用(也不需要)面向对象的方法。当函数
是在def
类中定义的方法时,将使用
参数。在函数定义中从不使用self
,这一事实表明,可以在类定义之外编写常规函数定义。删除self
参数self
- 你不是在比较小写字母。您的代码将硬编码列表的项转换为小写,但文本参数仍保持原样。在
常量中使用小写,并对传递给函数的文本调用skip_words
,而不是对常量调用lower
lower
- 如果遍历列表元素本身,Python代码通常可读性更高。使用变量来表示每个元素,而不是使用计数器来访问列表元素。这也就不需要使用
语句来检查前四行是否存在if
- 通常最好在函数中只使用一个
语句return
将退出break
循环,我认为您打算for
,这将跳过for循环的其余部分并进入下一个迭代继续
def name_extractor(text): skip_words = ['curriculum', 'vitae', 'resume'] text_lines = text.split('\n') for line in text_lines[:4]: line_words = set(line.lower().split(' ')) if not line_words.intersection(skip_words): return line return ''
跳过单词不在第一行,用户名在第一行,否则在第二行。@Nutmag64:有时第一行是“resume”,然后是少量新闻行,然后是name。这就是为什么我为四行设置了阈值你的问题是什么?@CarlosMonroyNieblas:对不起,更新了问题。请让我知道,如果仍然不清楚的文件,你正在搜索的名称的例子,将有助于产生更好的代码!你为什么要检查前4行?您说过,如果跳过单词不在第一行,用户名在第一行,否则在第二行。@Nutmag64:有时第一行是“resume”,然后是少量新闻行,然后是name。这就是我为四行设置阈值的原因