@MarkusPy2: Noch ein paar Anmerkungen zu Deinem Quelltext:
Namen wie `f`, `m`, `x`, und `ss` sind nicht gut. Ein Name soll dem Leser vermitteln was der Wert bedeutet. Ein- oder zweibuchstabige Namen oder kryptische Abkürzungen tun das nicht, und machen Code schwerer verständlich. Was dann eher zu Fehlern führt wenn das Programm vom fremden Leser interpretiert werden soll. Wobei man selbst auch ein fremder Leser ist, wenn man sich eigenen Code nach ein paar Monaten wieder anschaut.
`readlines()` liest alle Zeilen unnötigerweise auf einmal in den Speicher. Man kann an der Stelle einfach über das Dateiobjekt iterieren.
Wenn man irgendwo syntaktisch einen Namen angeben muss, der im Code dann aber nicht verwendet wird, hat sich dafür der Name `_` oder `__` etabliert. Dann weiss der Leser gleich das dieser Name/Wert absichtlich nicht verwendet wird, und das es kein Versehen oder noch unfertiger Code ist. Manchmal will man trotzdem einen lokalen Namen angeben, damit der Leser weiss *was* da nicht verwendet wird — dafür wird konventionell ein führender Unterstrich vor dem unbenutzten Namen verwendet.
Dein Code berechnet einen Hash einmal vor der Schleife, und dann 4.000 mal in der Schleife. Das kann man vereinfachen zu 4.001 mal in der Schleife.
Du verwendest offensichtlich Python 2, aber da sind Klammern bei der ``print``-Anweisung als wenn das eine Funktion wäre. Entweder sollte man die Anweisung auch wie eine Anweisung schreiben, oder sie durch den entsprechenden `__future__`-Import tatsächlich zu einer Funktion machen.
Ungetestet:
Code: Alles auswählen
#!usr/bin/env python
from __future__ import absolute_import, division, print_function
from hashlib import sha256
def main():
with open('test.txt', 'r') as lines:
for line in lines:
hashed = line.rstrip('\n')
for _ in range(0, 4001):
hashed = sha256(hashed).hexdigest()
print(hashed)
if __name__ == '__main__':
main()