为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2021-08-14 16:23:57
我想要一个包含整行的列表和一个包含单词的列表,以便稍后将其导出到 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']
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-08-14
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

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


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)


查看完整回答
反对 回复 2021-08-14
?
萧十郎

TA贡献1815条经验 获得超13个赞

避免在一行上写 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)


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信