2015-02-17 3 views
1

Я пытаюсь исключить определенные строки в списке строк, если строка содержит определенные слова.Python: удалить определенную строку из списка, если строка содержит определенное ключевое слово

Например, если в строке есть слово «корица» или «фрукты» или «есть», я надеюсь исключить его из списка строк.

['RT @haussera: Access to Apple Pay customer data, no, but another way? everybody wins - MarketWatch http://t.co/Fm3LE2iTkY', "Landed in the US, tired w horrible migrane. The only thing helping- Connie's new song on repeat. #SoGood #Nashville https://t.co/AscR4VUkMP", 'I wish jacob would be my cinnamon apple', "I've collected 9,112 gold coins! http://t.co/T62o8NoP09 #iphone, #iphonegames, #gameinsight", 'HAHAHA THEY USED THE SAME ARTICLE AS INDEPENDENT http://t.co/mC7nfnhqSw', '@hot1079atl Let me know what you think of the new single "Mirage "\nhttps://t.co/k8DJ7oxkyg', 'RT @SWNProductions: Hey All so we have a new iTunes listing due to our old one getting messed up please resubscribe via the following https…', 'Shawty go them apple bottoms jeans and the boots with the furrrr with furrrr the whole club is looking at her', 'I highly recommend you use MyMedia - a powerfull download manager for the iPhone/iPad. http://t.co/TWmYhgKwBH', 'Alusckが失われた時間の異常を解消しました http://t.co/peYgajYvQY http://t.co/sN3jAJnd1I', 'Театр радует туземцев! Теперь мой остров стал еще круче! http://t.co/EApBrIGghO #iphone, #iphonegames, #gameinsight', 'RT @AppIeOfficiel: Our iPhone 7 http://t.co/d2vCOCOTqt', 'Я выполнил задание "Подключаем резервы"! Заходите ко мне в гости! http://t.co/ZReExwwbxh #iphone #iphonegames #gameinsight', "RT @Louis_Tomlinson: @JennSelby Google 'original apple logo' and you will see the one printed on my shirt that you reported on. Trying to l…", "I've collected 4,100 gold coins! http://t.co/JZLQJdRtLG #iphone, #iphonegames, #gameinsight", "I've collected 28,800 gold coins! http://t.co/r3qXNHwUdp #iphone, #iphonegames, #gameinsight", 'RT @AppIeOfficiel: Our iPhone 7 http://t.co/d2vCOCOTqt'] 

keywordFilter=['eat','cinnamon','fruit'] 
for sent in list: 
    for word in keywordFilter: 
     if word in sent: 
      list.remove(sent) 

Но это не фильтрует ключевое слово, на которое я надеюсь, и вернул исходный список. У кого-нибудь есть идея, почему?

первый Edit:

import json 
from json import * 

tweets=[] 

for line in open('apple.json'): 
    try: 
     tweets.append(json.loads(line)) 
    except: 
     pass 

keywordFilter=set(['pie','juice','cinnamon']) 

for tweet in tweets: 
    for key, value in tweet.items(): 
     if key=='text': 
      tweetsF.append(value) 

print(type(tweetsF)) 
print(len(tweetsF)) 

tweetsFBK=[sent for sent in tweetsF if not any(word in sent for word in keywordFilter)] 
print(type(tweetsFBK))  
print(len(tweetsFBK)) 

Выше код, который я до сих пор. До tweetsF, строка хранится хорошо, и я попытался исключить слова с помощью keywordFilter.

Однако твитыFBK возвращает мне 0 (ничего). Кто-нибудь знает, почему?

+0

переполнения стека думает, что я робот хахахахаха –

+0

Вы просто хотите, чтобы удалить это слово из строки? Или, если строка содержит ключевое слово, удалите всю строку? – CoryKramer

+0

@ Циблируйте строку с ключевым словом. –

ответ

4

Одно из решений заключается в следующем:

list = [sent for sent in list 
    if not any(word in sent for word in keywordFilter)] 

Это удалит все строки, содержащие одно из слов в списке keywordFilter в качестве подстроки. Например, он удалит вторую строку, так как содержит слово repeateat - подстрока repeat).

Если вы хотите, чтобы избежать этого, вы можете сделать следующее:

list = [sent for sent in list 
    if not any(word in sent.split(' ') for word in keywordFilter)] 

Это удалит только строки, содержащие одно из слов в списке keywordFilter как полслова (т.е. с разделителями пробелами в предложении) ,

3

Вы можете использовать any в списке понимание фильтровать для вас

original_list = ['RT @haussera: Access to Apple Pay customer data, no, but another way? everybody wins - MarketWatch http://t.co/Fm3LE2iTkY', "Landed in the US, tired w horrible migrane. The only thing helping- Connie's new song on repeat. #SoGood #Nashville https://t.co/AscR4VUkMP", 'I wish jacob would be my cinnamon apple', "I've collected 9,112 gold coins! http://t.co/T62o8NoP09 #iphone, #iphonegames, #gameinsight", 'HAHAHA THEY USED THE SAME ARTICLE AS INDEPENDENT http://t.co/mC7nfnhqSw', '@hot1079atl Let me know what you think of the new single "Mirage "\nhttps://t.co/k8DJ7oxkyg', 'RT @SWNProductions: Hey All so we have a new iTunes listing due to our old one getting messed up please resubscribe via the following https…', 'Shawty go them apple bottoms jeans and the boots with the furrrr with furrrr the whole club is looking at her', 'I highly recommend you use MyMedia - a powerfull download manager for the iPhone/iPad. http://t.co/TWmYhgKwBH', 'Alusckが失われた時間の異常を解消しました http://t.co/peYgajYvQY http://t.co/sN3jAJnd1I', 'Театр радует туземцев! Теперь мой остров стал еще круче! http://t.co/EApBrIGghO #iphone, #iphonegames, #gameinsight', 'RT @AppIeOfficiel: Our iPhone 7 http://t.co/d2vCOCOTqt', 'Я выполнил задание "Подключаем резервы"! Заходите ко мне в гости! http://t.co/ZReExwwbxh #iphone #iphonegames #gameinsight', "RT @Louis_Tomlinson: @JennSelby Google 'original apple logo' and you will see the one printed on my shirt that you reported on. Trying to l…", "I've collected 4,100 gold coins! http://t.co/JZLQJdRtLG #iphone, #iphonegames, #gameinsight", "I've collected 28,800 gold coins! http://t.co/r3qXNHwUdp #iphone, #iphonegames, #gameinsight", 'RT @AppIeOfficiel: Our iPhone 7 http://t.co/d2vCOCOTqt'] 

keywordFilter = set(['eat','cinnamon','fruit']) 

filtered_list = [str for str in originial_list if not any(i in str for i in keywordFilter)] 
+0

Спасибо за ваш код. У меня есть быстрый вопрос. В python3 ваш код отлично исключает ключевое слово из строки.Однако запуск кода на терминале не работает. Другими словами, допустим, я сохранил этот код на test.py. Я запустил терминал и набрал «python3 test.py» и запустил его. Он возвращает мне [], пустую строку. Ты знаешь почему? –

0

Просто сложный :)

final_list = [] 
for i in original_list: 
    temp = [] 
    for k in i.split(" "): 
     if not any(i for i in keywordFilter if i in k): 
      temp.append(k) 
    final_list.append(" ".join(temp)) 
print final_list 
Смежные вопросы