Python - Как мне всегда печатать слово из списка, найденного в документе, в другой список? - PullRequest
0 голосов
/ 11 ноября 2018

Я хочу иметь один список со всей строкой и один список со словом, чтобы потом можно было экспортировать его в Excel.

мой код всегда возвращает:

NameError: name 'word' is not defined

Вот мой код:

l_lv = []
l_words = []

fname_in = "test.txt"
fname_out = "Ergebnisse.txt"


search_list =['kostenlos', 'bauseits', 'ohne Vergütung']

with open(fname_in,'r') as f_in:
    for line in f_in:
        if any (word in line for word in search_list):
            l_lv.append(line)
            l_words.append(word)


print(l_lv)
print(l_words)

Edit: У меня есть файл с текстом, который выглядит примерно как fname_in и список слов, по которым я хочу найти (search_list). Всегда, когда слово найдено в файле, я хочу, чтобы слово было записано в список l_words и отправка в список l_lv.

Код для строк работает. Но это не возвращает слова.

Вот экзамен:

fname_in = 'sentance1 с костенлосом в нем. блаблабла. еще один посыл2 с костенлосом в нем. sentance3 с баузитами в нем. блаблабла. другой sentance4 с баузитами в нем. блаблабла.

В результате я хочу получить:

l_lv = ['sentance1 с костенлосом в нем', 'другой sentance2 с костенлосом в нем', 'sentance3 с бозеитами в нем', 'еще один sentance4 с бозеитами в нем']

l_words = ['kostenlos', 'kostenlos', 'bauseits', 'bauseits']

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Переменная word связана только в выражении генератора, переданном в any(), поэтому она не существует, когда вы попытаетесь добавить ее в список позже. Кажется, вы хотите знать не только, появилось ли слово из списка поиска в строке, но и какие из них. Попробуйте это:

for line in f_in:
    found = [word for word in search_list if word in line]
    if found:
        l_lv.append(line)
        l_words.append(found)

Обратите внимание, что в этом коде предполагается, что в каждой строке может появляться более одного слова, и он добавляет список слов в l_lv для каждой строки, что означает, что l_lv является списком списков. Если вы хотите добавить только первое найденное слово в каждой строке:

l_words.append(found[0])
0 голосов
/ 11 ноября 2018

Избегайте записи циклов в одну строку: это ухудшает читабельность и может вызвать проблемы.

Попробуйте это:

l_lv = []
l_words = []

input_file = "test.txt"
output_file = "Ergebnisse.txt"


search_list =['kostenlos', 'bauseits', 'ohne Vergütung']

with open(input_file,'r') as f:
    for line in f:
        for word in search_list:
            if word in line:
                l_lv.append(line)
                l_words.append(word)
0 голосов
/ 11 ноября 2018

У вас нет доступа к переменным вне выражений списка / генератора и т. Д. Ошибка действительна в том смысле, что «слово» не определяется при попытке добавить его.

l_lv = []
l_words = []

fname_in = "test.txt"
fname_out = "Ergebnisse.txt"


search_list =['kostenlos', 'bauseits', 'ohne Vergütung']

with open(fname_in,'r') as f_in:
    for line in f_in:
        if any(word in line for word in search_list):
            l_lv.append(line)
            #for nested list instead of a flat list of words 
            #(to handle cases where more than 1 word matches in the same sentence.)
            #words_per_line = []
            for word in search_list:
                l_words.append(word)
                #words_per_line.append(word)
            #if words_per_line:
                #l_words.append(words_per_line)
print(l_lv)
print(l_words)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...