hope to know a rank, if it has. if not, just show 0. - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: hope to know a rank, if it has. if not, just show 0. (/thread-11467.html) |
hope to know a rank, if it has. if not, just show 0. - tyyi - Jul-10-2018 Dear All, I think my question would be easy for most, not just for me. I've spent two day to solve it, but I'm now giving up! Please advice... import re data = """ t=A n=1 www.aaa.com t=A n=2 www.bbb.com t=A n=3 www.ccc.com t=B n=1 www.aaa.com t=B n=2 www.bbb.com t=B n=3 www.ddd.com t=C n=1 www.bbb.com t=C n=2 www.ddd.com t=C n=3 www.ccc.com t=D n=1 www.aaa.com t=D n=2 www.bbb.com t=D n=3 www.ccc.com t=D n=4 www.eee.com """ domain = "www.ddd.com" for line in data.splitlines(): tn = re.compile("t=(\w)\s+n=(\d)") get = tn.findall(line) get = str(get) if domain in line: print("The rank is " + get + " " + domain)From above code, I hope to get the result as below; The rank is 0 in A group. The rank is 3 in B group. The rank is 2 in C group. The rank is 0 in D group. But I got the result as below: The rank is [('B', '3')] www.ddd.com The rank is [('C', '2')] www.ddd.com Could you please give me your teachings? Thank you for your interesting. RE: hope to know a rank, if it has. if not, just show 0. - buran - Jul-10-2018 No need for re from collections import OrderedDict data = """ t=A n=1 www.aaa.com t=A n=2 www.bbb.com t=A n=3 www.ccc.com t=B n=1 www.aaa.com t=B n=2 www.bbb.com t=B n=3 www.ddd.com t=C n=1 www.bbb.com t=C n=2 www.ddd.com t=C n=3 www.ccc.com t=D n=1 www.aaa.com t=D n=2 www.bbb.com t=D n=3 www.ccc.com t=D n=4 www.eee.com """ def process_data(data): ranks = OrderedDict() for line in data.split('\n'): line = line.strip() # because you have rows with just space between groups if line: line_data = line.split(' ') url = line_data[-1] group, rank = [item.split('=')[-1] for item in line_data[:-1]] ranks.setdefault(group, {})[url] = rank return ranks def get_ranks(url, ranks): return ((url_ranks.get(url, 0), group) for group, url_ranks in ranks.items()) if __name__ == '__main_'': url = "www.ddd.com" all_ranks = process_data(data=data) for rank, group in get_ranks(url=url, ranks=all_ranks): print('The rank is {} is {} group'.format(rank, group)) RE: hope to know a rank, if it has. if not, just show 0. - Prabakaran141 - Jul-10-2018 Hi Tyyi, The findall will return all the matched pattern in the line, from there you need to parse and print accordingly. For reference read the doc, https://docs.python.org/2/library/re.html#finding-all-adverbs Thanks, Praba RE: hope to know a rank, if it has. if not, just show 0. - tyyi - Jul-10-2018 Thank you for your teaching. buran! I did copy and paste your code, then execute in console. But I didn't see anything in the console. I will try to do to see something that I hope to get. I really appreciate your help again. I'm very very newbie to Python, also other languages. So my questions will be usually idiots, but I will learn from it. Thank YOU! (Jul-10-2018, 09:59 AM)buran Wrote: No need for re RE: hope to know a rank, if it has. if not, just show 0. - buran - Jul-10-2018 My bad, fix line 36 from collections import OrderedDict data = """ t=A n=1 www.aaa.com t=A n=2 www.bbb.com t=A n=3 www.ccc.com t=B n=1 www.aaa.com t=B n=2 www.bbb.com t=B n=3 www.ddd.com t=C n=1 www.bbb.com t=C n=2 www.ddd.com t=C n=3 www.ccc.com t=D n=1 www.aaa.com t=D n=2 www.bbb.com t=D n=3 www.ccc.com t=D n=4 www.eee.com """ def process_data(data): ranks = OrderedDict() for line in data.split('\n'): line = line.strip() if line: line_data = line.split(' ') url = line_data[-1] group, rank = [item.split('=')[-1] for item in line_data[:-1]] ranks.setdefault(group, {})[url] = rank return ranks def get_ranks(url, ranks): return ((url_ranks.get(url, 0), group) for group, url_ranks in ranks.items()) if __name__ == '__main__': url = "www.ddd.com" all_ranks = process_data(data=data) for rank, group in get_ranks(url=url, ranks=all_ranks): print('The rank is {} in {} group'.format(rank, group))
RE: hope to know a rank, if it has. if not, just show 0. - tyyi - Jul-10-2018 Thank you for your quick revised answer! When I executed the first one, I got the error message, so I just removed ' from 36 line, not added _ I got the result I hope to see. I have to study your code from now on. really appreciated your answer one more! It is my first question after subscribed in Python forum. I got very good impression from YOU! (Jul-10-2018, 10:25 AM)buran Wrote: My bad, fix line 36 |