Comment afficher les premiers caractères d'une chaîne en Python?

87

Salut, je viens de commencer à apprendre Python mais je suis en quelque sorte coincé en ce moment.

J'ai un hash.txtfichier contenant des milliers de hachages de logiciels malveillants dans MD5, Sha1 et Sha5 respectivement séparés par des délimiteurs dans chaque ligne. Voici 2 exemples de lignes que j'ai extraites du fichier .txt.

416d76b8811b0ddae2fdad8f4721ddbe | d4f656ee006e248f2f3a8a93a8aec5868788b927 | 12a5f648928f8e0b5376d2cc07de8e4cbf9f7ccbadb97d898373f85f0a75c47f 56a99a4205a4d6cab2dcae414a5670fd | 612aeeeaa8aa432a7b96202847169ecae56b07ee | d17de7ca4c8f24ff49314f0f342dbe9243b10e9f3558c6193e2fd6bccb1be6d2

Mon intention est d'afficher les 32 premiers caractères (hachage MD5) afin que la sortie ressemble à ceci:

416d76b8811b0ddae2fdad8f4721ddbe 56a99a4205a4d6cab2dcae414a5670fd

Des idées?

Rising Lee
la source
7
Lisez cette brève introduction à Python et faites défiler à mi-chemin. "String slicing" est ce que vous voulez.
Joel Cornett
11
the_string[:32]
JBernardo
2
Tranchage de chaînes et comment ouvrir des fichiers si vous ne l'avez pas déjà lu
César
2
Vous serez probablement également intéressé par les méthodes .split()et les .strip()chaînes de caractères. Par exemple, md5, sha1, sha5 = line.strip().split("|")fait à peu près ce que vous devinez.
DSM
1
Merci pour vos commentaires les gars, j'ai enfin réussi à le faire fonctionner. J'ai essayé toutes les méthodes et il semble que TankorSmash fonctionne le plus pratique pour moi. J'apprécie l'aide de chacun!
Rising Lee

Réponses:

185

Vous pouvez `` découper '' un stringtrès facilement, comme vous tireriez des éléments d'un list:

a_string = 'This is a string'

Pour obtenir les 4 premières lettres:

first_four_letters = a_string[:4]
>>> 'This'

Ou les 5 derniers:

last_five_letters = a_string[-5:]
>>> 'string'

Donc, en appliquant cette logique à votre problème:

the_string = '416d76b8811b0ddae2fdad8f4721ddbe|d4f656ee006e248f2f3a8a93a8aec5868788b927|12a5f648928f8e0b5376d2cc07de8e4cbf9f7ccbadb97d898373f85f0a75c47f '
first_32_chars = the_string[:32]
>>> 416d76b8811b0ddae2fdad8f4721ddbe
TankorSmash
la source
1
the_string.split ('|') [0]
César
3
@ César: il est généralement préférable (et plus rapide) de montrer que vous n'avez besoin que de la première partie de la chaîne divisée avec the_string.split('|', 1)[0].
Eric O Lebigot
16

Puisqu'il y a un délimiteur, vous devriez l'utiliser au lieu de vous soucier de la longueur du md5.

>>> s = "416d76b8811b0ddae2fdad8f4721ddbe|d4f656ee006e248f2f3a8a93a8aec5868788b927|12a5f648928f8e0b5376d2cc07de8e4cbf9f7ccbadb97d898373f85f0a75c47f"
>>> md5sum, delim, rest = s.partition('|')
>>> md5sum
'416d76b8811b0ddae2fdad8f4721ddbe'

Alternativement

>>> md5sum, sha1sum, sha5sum = s.split('|')
>>> md5sum
'416d76b8811b0ddae2fdad8f4721ddbe'
>>> sha1sum
'd4f656ee006e248f2f3a8a93a8aec5868788b927'
>>> sha5sum
'12a5f648928f8e0b5376d2cc07de8e4cbf9f7ccbadb97d898373f85f0a75c47f'
John La Rooy
la source
2
+1 pour considérer le truc de délimiteur pour le hachage de longueur variable :-)
Vinayak Kolagi
0

Si vous voulez les 2 premières lettres et les 2 dernières lettres d'une chaîne, vous pouvez utiliser le code suivant: name = "India" name[0:2]="In" names[-2:]="ia"

Darshan Jain
la source