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ć' :)