我正在尝试在文件中搜索单词。这些词存储在单独的列表中。 找到的单词存储在另一个列表中,最后返回该列表。
代码如下:
def scanEducation(file):
education = []
qualities = ["python", "java", "sql", "mysql", "sqlite", "c#", "c++", "c", "javascript", "pascal",
"html", "css", "jquery", "linux", "windows"]
with open("C:\Users\Vadim\Desktop\Python\New_cvs\\" + file, 'r') as file1:
for line in file1:
for word in line.split():
matching = [s for s in qualities if word.lower() in s]
if matching is not None:
education.append(matching)
return education
首先,它返回一个列表,其中包含一堆空“座位”,这意味着我的比较不起作用?
结果(扫描4个文件):
"C:\Program Files (x86)\Python2\python.exe" C:/Users/Vadim/PycharmProjects/TestFiles/ReadTXT.py
[[], [], [], [], [], [], [], [], [], ['java', 'javascript']]
[[], [], [], [], [], [], [], [], [], ['pascal']]
[[], [], [], [], [], [], [], [], [], ['linux']]
[[], [], [], [], [], [], [], [], [], [], ['c#']]
Process finished with exit code 0
输入文件包含:
Name: Some Name
Phone: 1234567890
email: some@email.com
python,excel,linux
第二期每个文件包含3个不同的技能,但是函数只找到1个或2个。这也是一个不好的比较还是我这里有不同的错误?
我希望结果是一个只包含找到的技能的列表,没有空白的地方,并且可以找到文件中的所有技能,而不仅仅是其中的一些技能。
编辑:当我执行 word.split(', ')
时,函数确实找到了所有技能
但如果我希望它更通用,如果我不知道究竟是什么将它们分开,那么找到这些技能的好方法是什么?
最佳答案
您得到空列表是因为 None
不等于空列表。您可能需要将条件更改为以下内容:
if matching:
# do your stuff
您似乎正在检查质量列表中的字符串中是否存在子字符串。这可能不是你想要的。如果您想检查出现在质量列表中的一行中的单词,您可能需要将您的列表理解更改为:
words = line.split()
match = [word for word in words if word.lower() in qualities]
如果您要同时匹配 、
和空格,您可能需要查看正则表达式。参见 Split Strings with Multiple Delimiters? .
关于python - 在文件中搜索列表中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39684483/