Python - 如何始终将文档中的列表中的单词打印到另一个列表?

我想要一个包含整行的列表和一个包含单词的列表,以便稍后将其导出到 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)

编辑:我有一个包含文本的文件,它看起来像 fname_in 和一个我希望它被搜索的单词列表 (search_list)。总是在文件中找到单词时,我希望将单词写入列表 l_words 并将句子写入列表 l_lv。


行的代码有效。但它不会返回单词。


这里有一个例子:


fname_in ='sentance1 中包含 kostenlos。布拉布拉布拉。另一个带有 kostenlos 的句子 2。带有 bauseits 的句子 3。布拉布拉布拉。另一个带有 bauseits 的句子 4。blablabla。


因此,我希望有:


l_lv = ['带有 kostenlos 的句子 1','带有 kostenlos 的另一个句子 2','带有 bauseits 的句子 3','带有 bauseits 的另一个句子 4']


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


至尊宝的传说
浏览 181回答 3
3回答

DIEA

该变量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])

米琪卡哇伊

您无权访问列表推导式/生成器表达式等之外的变量。该错误是有效的,因为当您尝试附加它时未定义“单词”。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)

萧十郎

避免在一行上写 for 循环:它会降低可读性并可能导致问题。试试这个: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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python