comparing 2 lists and highlighting key elements - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Web Scraping & Web Development (https://python-forum.io/forum-13.html) +--- Thread: comparing 2 lists and highlighting key elements (/thread-15379.html) |
comparing 2 lists and highlighting key elements - kapilan15 - Jan-15-2019 from colorama import Fore, init init() key_words = ['mystery', 'the', 'charge', 'pretends'] paragraph_split = ['the', 'desired', 'mystery', 'corners', 'the', 'differential', '.', 'the', 'back', 'pretends', 'to', 'be', 'the'] def highlight(word): if word in key_words: return Fore.RED + str(word) else: return str(word) colored_paragraph = list(map(highlight, paragraph_split)) print (" ".join(colored_paragraph))Essentially I want the code to go through each word in paragraph_split list and check whether the respective word exists in the paragraph_split list. If it exists, I want to replace the word with red font and move on to the next word Then I want to join the words in colored_paragraph list and print out as a sentence. The output should have some words colored in red and others in normal colour. I ran my code in cmd and it gives all output in red font rather than just the words in key_words. Then I added encode("utf-8") in the print statement so it becomes print (" ".join(colored_paragraph).encode("utf-8"))This gave me The words were not printed in colors. Can someone help me on this please? Thanks
RE: comparing 2 lists and highlighting key elements - buran - Jan-15-2019 you need to reset back to normal color, e.g print('\033[30m') # this will reset to default color return Fore.RED + word + Fore.RESETor when call init, supply autoreset=True argument (default is False) init(autoreset=True)In this case you don't need Fore.RESET
RE: comparing 2 lists and highlighting key elements - kapilan15 - Jan-15-2019 import bs4 as bs import urllib.request import re import os from colorama import Fore, Back, Style, init init() def highlight(word): if word in keywords: return Fore.RED + str(word) + Fore.RESET else: return str(word) for newurl in newurls: url = urllib.request.urlopen(newurl) soup1 = bs.BeautifulSoup(url, 'lxml') paragraphs =soup1.findAll('p') print (Fore.GREEN + soup1.h2.text + Fore.RESET) print('') for paragraph in paragraphs: if paragraph != None: textpara = paragraph.text.strip().split(' ') colored_words = list(map(highlight, textpara)) print(" ".join(colored_words).encode("utf-8")) #encode("utf-8") else: passThanks it works on the previous code. This is a slightly different code but similar content. I will have list of key words and urls to go through. after adding your suggestion, I ran few key words in a url and it is giving me an output similar to the previous code If I remove encode("utf-8") then cmd is giving me encoding error Can you help where I am going wrong please?Thanks |