Pypthon: Unterschied zwischen den Versionen

Aus Meine persönliche Wissensdatenbank
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 3: Zeile 3:
Shebang für Python-Programme:
Shebang für Python-Programme:
  #!/usr/bin/env python3
  #!/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===
===SHA256-Checksummen-Checker===
Zeile 69: Zeile 75:


Diese Eventualitäten kann man natürlich im Skript abfangen.
Diese Eventualitäten kann man natürlich im Skript abfangen.
[[Kategorie:Python]]

Aktuelle Version vom 9. Mai 2026, 06:43 Uhr

Programme

Shebang für Python-Programme:

#!/usr/bin/env python3

Snipets

Lösungen für Telaufgaben

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:

  1. Parameter: zu prüfende Datei
  2. Parameter: erwarteter sha256-String

Vor Anwendung unter Linux:

chmod +x shc.py

Um es ausführbar zu machen.

Was das Programm nicht kann:

  1. 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.
  2. Ist die angegebene Datei nicht vorhanden, bricht das Skript mit einer Fehlermeldung ab.

Diese Eventualitäten kann man natürlich im Skript abfangen.