2016-12-15 1 views
1

J'essaie de générer le hachage MD5 basé sur un fichier txt. Cependant, il y a des règles que je dois suivre, comme:Python ne supprime pas la cartouche de retour et la ligne d'alimentation dans le fichier

  • La règle de codage doit être « ISO-8859-1 »
  • Tous les caractères doivent être en minuscules
  • caractères Nouvelle ligne et caractères de retour chariot doivent pas être considérés sur la construction de hachage

    Mon fichier contient \r et \n caractères, ce qui signifie une nouvelle ligne et retour cartouche. J'ai essayé de supprimer ces caractères en utilisant les fonctions rstrip et strip, mais il semble que cela n'a pas fonctionné. Pour être sûr de cela, j'ai écrit un fichier txt et l'ai ouvert sur Notepad ++ et, comme vous pouvez le voir sur l'image ci-dessous, les caractères sont toujours là.

Check the cr and lf characters in that image

J'ai essayé une autre solution: je fonction split pour créer une liste, en utilisant \n comme séparateur, juste pour être sûr que si les personnages sont vraiment là-dedans. Comme je le pensais, ils l'étaient.

Que dois-je faire pour vraiment supprimer ces caractères?

L'un des codes j'ai essayé:

from hashlib import md5 

open_file = open('N0003977.290', 'r', encoding = 'ISO-8859-1') 
test_file = open('file_test.txt', 'w') 
file_content = open_file.read().lower().rstrip('\n\r ').strip('\n\r') 

#writing a txt file to check if there are new line characters 
test_file.write(file_content) 
test_file.close() 

#creating a md5 hash 
m = md5() 
m.update(file_content.encode('ISO-8859-1')) 
print(m.hexdigest()) 
+0

Utiliser 'str.replace' afin de remplacer ces caractères par une chaîne vide, c'est-à-dire 'file_content.replace ('\ n', '') .replace ('\ r', '')'. –

+0

J'ai essayé ça aussi, mais ça n'a pas marché. :/ –

+0

comment cela n'a-t-il pas fonctionné? –

Répondre

0

Je supprimerais les caractères "retour chariot" et "saut de ligne" en utilisant str.translate(), comme ceci:

file_content = file_content.translate({ord(ch):None for ch in '\r\n'}) 

Alternativement, si cela une tâche en classe et nous n'avions pas encore couvert str.translate(), je pourrais faire le travail "à la main":

file_content = ''.join(ch for ch in file_content if ch not in '\r\n') 

Programme complet:

from hashlib import md5 

open_file = open('N0003977.290', 'r', encoding = 'ISO-8859-1') 
test_file = open('file_test.txt', 'w', encoding = 'ISO-8859-1') 
file_content = open_file.read() 

# Choose one of the following: 
file_content = file_content.translate({ord(ch):None for ch in '\r\n'}) 
# file_content = ''.join(ch for ch in file_content if ch not in '\r\n') 


#writing a txt file to check if there are new line characters 
test_file.write(file_content) 
test_file.close() 

#creating a md5 hash 
m = md5() 
m.update(file_content.encode('ISO-8859-1')) 
print(m.hexdigest()) 
+0

Merci beaucoup @ Robᵩ. Ça a marché! :RÉ –

0

est le fichier d'origine dans le codage ISO-8859-1?

Si tel est le cas, vous ne devriez pas l'encoder avant de le hacher, sinon vous devriez faire le codage mais pas ouvrir le fichier en utilisant cet encodage.

Le rstrip et lstrip ne fonctionnera pas, car il échappe seulement au début et à la fin de la totalité du contenu:

>>> '\r\nlalala\r\nlalalal\r\n'.rstrip().lstrip() 'lalala\r\nlalalal'

espérons qu'il vous aidera,