Zadanie z analizą logów

0

Witam,
Pytanie od kompletnego świeżaka, mam zadanie napisać program który otwiera plik tekstowy i wypisuje z niego tylko adresy stron www wraz z liczbą wystąpień każdego linku. Mam przyjąć ze zaczyna sie od http:// albo https:// i składa sie z ciągu liter i cyfr rozdzielonych kropką. Może to być zwykły adres jak i np 168.0.0.1. Dodatkowo adresy powinny być wypisane od najczęściej występujących i posortowane w kolejności alfabetycznej.
Póki co wyszło mi coś takiego i teraz nie wiem jak to wypisać w kolejności i posortować aflabetycznie. :/

import re

plik = open('logi.txt','r')
tekst = plik.read()

    
tekst = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+|[0-9\.-]+[0-9\.-]', tekst)
d = {}
 
for elem in tekst:
    try:
    	d[elem]
    except KeyError:
    	d[elem] = 0
    finally:
    	d[elem] += 1


[print ('link "{}" wystąpił "{}" razy\n'.format(word, count)) for word, count in d.items()]

Trochę zmieniłem teraz wygląda tak i zwraca w kolejności od najczęściej występującego.

import re
import collections
plik = open('logi.txt','r')
tekst = plik.read()

    
tekst = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+|[0-9\.-]+[0-9\.-]', tekst)

 
cnt = collections.Counter()
for word in tekst:
    words = word.split()
    for word in words:
        if word not in cnt:
            cnt[word] = 1
        else:
            cnt[word] += 1
print(cnt)

I zwraca

Counter({'https://www.onet.pl': 9, 'https://analityk.edu.pl': 7, 'https://docs.python.org': 4, '168.0.0.4': 3, 'https://www.youtube.com': 1, '168.0.0.3': 1, '168.0.0.12': 1})

Nie wiem czy ma to tak wyglądać, jak dla mnie jest ok, chyba że któs ma pomysł jak to 'usprawnić' :)

2

Trochę przekombinowałeś. Zwróć uwagę, że Counter może przyjmować argument typu iterable.

import re
import collections
plik = open('logi.txt','r')
tekst = plik.read()

tekst = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+|[0-9\.-]+[0-9\.-]', tekst)

cnt = collections.Counter(tekst )
print(cnt)

Niby masz tam split, ale nie wygląda, żeby on cokolwiek robił, bo nie masz żadnych białych znaków w tym regexie.

0

@szatkus: Super dzięki wielkie. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1