Datei nach mehreren Ergebnissen durchsuchen und diese Sortieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mzg
User
Beiträge: 1
Registriert: Sonntag 24. November 2019, 13:02

Hi,

Vorweg ich bin kein Programmierer sondern Sysadmin und hab frisch angefangen mich mit Python zu beschäftigen.

ich schreibe aktuell mehrere kleine Scripts die von verschiedenen Programmen aus dem Netz ziehen was die aktuellste Version ist, bei den meisten ist es kein Problem da es irgendwo auf der Seite ein "Aktuelle Version:" oder ähnliches gibt, aber Cisco ist eben anders :)
Hintergrund ist dieser das ich mehrere Software Images warte die wir zum Deployen von neuen Rechnern verwenden und ich nicht immer händisch nachschauen will von welcher Software es jetzt eine neue Version gibt.

mein bisheriger Code funktioniert auch aber auch nur weil die aktuellste Version ganz oben steht, ich würde lieber alle entsprechenden Zeilen in eine Liste schreiben, auf die eigentliche Versionsnummer runterbrechen und mir dann den Wert ausgeben der die höchsten sprich am neuesten ist.
könnt ihr mir einen anstoß geben wie ich weiter machen könnte? aktuell steh ich irgendwie auf dem schlauch.

Code:

Code: Alles auswählen

import urllib.request
import re

#download file
urllib.request.urlretrieve("https://www.cisco.com/c/en/us/support/unified-communications/jabber-windows/products-release-notes-list.html", "/tmp/jabber.txt")

#string
stringToMatch = "Release Notes for Cisco Jabber for Windows"

#get line
with open("/tmp/jabber.txt", 'r') as file:
	for line in file:
		if stringToMatch in line:
			matchedLine = line
			break

#strip string
JabberVersion = matchedLine
itemReg = re.compile('Release Notes for Cisco Jabber for Windows (.*?)</a>', re.S|re.S)
JabberVersion = str(itemReg.findall(JabberVersion))
JabberVersion = JabberVersion.replace("['", "")
JabberVersion = JabberVersion.replace("']", "")
JabberVersion = JabberVersion.strip()

print ("Cisco Jabber: " + JabberVersion) 
Ausgabe:

Code: Alles auswählen

Cisco Jabber: 12.7
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Es ist nicht nötig, die HTML-Seite erst in eine Datei zu schreiben, die kann man gleich direkt lesen. HTML sollte man auch dann nicht als Text-Datei behandeln, sondern einen HTML-Parser benutzen, wie z.B. BeautifulSoup.
Warum suchst Du auch erst die Datei mit `in` durch, um dann doch reguläre Ausdrücke zu benutzen. Hättest Du auch gleich machen können.
Die Stringrepräsentation einer Liste ist nur für Debuggingzwecke, nicht um damit mit Stringoperationen drauf los zu gehen.

Code: Alles auswählen

import re
import urllib.request
import bs4

URL = "https://www.cisco.com/c/en/us/support/unified-communications/jabber-windows/products-release-notes-list.html"
response = urllib.request.urlopen(URL)
html = bs4.BeautifulSoup(response)

for element in html.find_all('a'):
    text = element.text
    match = re.match("Release Notes for Cisco Jabber for Windows (\S+)", text)
    if match:
        print(match.group(1))
Antworten