Pypthon
Programme
Shebang für Python-Programme:
#!/usr/bin/env python3
Snipets
Lösungen für Telaufgaben
- pandas: Prüfen, ob Variable NaN (keine Zahl) oder ein Zeitstempel ist
- Möglichkeiten formatierter Ausgabe
SHA256-Checksummen-Checker
Keine besondere Erfinderhöhe. Daher ohne Copyright, sondern Freeware.
Problem: Wenn man im Internet Dateien zum Download angeboten bekommt, kann man die Datenintegrität oft anhand eines angezeigten SHA256-Hashes überprüfen. Dazu existieren unter allen Betriebssystemen Shell-Tools, um den Hasch einer Datei zu berechnen.
Unter Linux:
sha256sum
Das Resultat kann man dann mit dem auf der Webseite vorgegebenen Hash-String vergleichen. Das finde ich eher mühsam; warum kann man den Hash nicht gleich mit prüfen? Für GTK gibt es diverse Tools und einige können auch die Vorgabe gleich mit prüfen. GTK finde ich aber übertrieben. Das kann gern in der Konsole laufen.
Die schafft mein kleines Progrämmchen shc.py (sha256-check):
#!/usr/bin/env python3
import hashlib
import sys
version = '\nSHA256-Checker version 0.1 Free and open source software\n'
helptext = "Help: run parameters are: filename expected-sha256-string\n"
txt_color_gn = "\033[0;32m" # green colored text
txt_color_rd = "\033[0;31m" # red colored text
txt_color_wt = "\033[0;0m" # white colored text (default)
def calculate_sha256(filename, chunk_size=65536):
sha256 = hashlib.sha256()
with open(filename, 'rb') as f:
while True:
data = f.read(chunk_size)
if not data:
break
sha256.update(data)
return sha256.hexdigest()
# probe reading parameters
try:
filename = sys.argv[1]
hashvalue= sys.argv[2]
except IndexError:
# in case of index error, print helpstring and exit
print(version, "\n", helptext, sep='') # sep='' prevents leading space in output line
sys.exit() # program ends here
hashresult=calculate_sha256(filename)
if hashresult== hashvalue:
print(version, txt_color_gn, "\nCheck OK:" ,hashresult) # output text in green
else:
print(version, txt_color_rd, "\nCheck fail! Calculated result:\n", hashresult, sep='') # output text in red
print(txt_color_wt, "\nDone.\n") # regular end of program
Ein Start ohne Parameter zeigt an, welche Parameter nötig sind und bricht dann ab:
- Parameter: zu prüfende Datei
- Parameter: erwarteter sha256-String
Vor Anwendung unter Linux:
chmod +x shc.py
Um es ausführbar zu machen.
Was das Programm nicht kann:
- Per Link zum Kopieren bereitgestellten Hashes ist gelegentlich (?) ein 'sha256:' vorangestellt. Dieser Prefix wird vom Skript nicht entfernt und führt zum Scheitern des Stringvergleichs; auch wenn er korrekt ist.
- Ist die angegebene Datei nicht vorhanden, bricht das Skript mit einer Fehlermeldung ab.
Diese Eventualitäten kann man natürlich im Skript abfangen.