Поиск Python из функции списка слов - PullRequest
0 голосов
/ 21 сентября 2019


По той или иной причине у меня возникают проблемы с пониманием того, как получить мой список слов для поиска в текстовом файле списка предоставленных мною слов.Я нашел способ создания списка слов, используя выражения «elif», но я хотел бы сделать это правильно.- Python 3.7.x

name = 'Foo'
name1 = 'Bar'
name2 = 'python'
searchfile = open("test.txt","r")
num_lines = 0

for line in searchfile:
    num_lines += 1
    line = line.lower()
    if name in line:
        print ("Found on Line:",num_lines, line)
    elif name1 in line:
        print ("Found on Line:",num_lines, line)
    elif name2 in line:
        print ("Found on Line:",num_lines, line)

Я бы хотел, чтобы переменные "name" содержали списки слов для поиска.вот так .. Но я получаю ошибки.

name = ("foo","bar","python")
name1 = ("foo1","bar1","python1")
name2 = ("foo2","bar2","python2")

TypeError: для 'in' в качестве левого операнда требуется строка, а не tuple
, возможно, если я увижу правильный код, мой мозг его поймет.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Это потому, что в вашем примере name является кортежем, а name in line попытается проверить, находится ли кортеж внутри строки типа string.Вы можете перебирать любое слово, которое хотите проверить, как это

name = ('Foo', 'Bar', 'python')
searchfile = open("test.txt","r")

for num_lines, line in enumerate(searchfile, 1):
    for word in names:
        if word.lower() in line.lower():
             print("Found on Line:", num_lines, line)

Кроме того, если вы хотите иметь несколько «имен», как вы сказали, вы можете сделать:

name = ("foo","bar","python")
name1 = ("foo1","bar1","python1")
name2 = ("foo2","bar2","python2")
names = name + name1 + name2

Иитерация for word in names как и раньше.Я не знаю, каковы ваши требования, но лучше создать

names = ("foo", "bar", "python", "foo1", "bar1", "python1", "foo2", "bar2", "python2")

как один кортеж вместо N кортежей.

0 голосов
/ 21 сентября 2019

Самый простой способ - использовать цикл for

name = ("foo","bar","python")
for n in name:
    if n in line:
        print ("Found on Line:",num_lines, line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...