Como exibir os primeiros caracteres de uma string em Python?

87

Olá. Acabei de começar a aprender Python, mas estou meio preso agora.

Eu tenho um hash.txtarquivo contendo milhares de hashes de malware em MD5, Sha1 e Sha5, respectivamente, separados por delimitadores em cada linha. Abaixo estão 2 exemplos de linhas que extraí do arquivo .txt.

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

Minha intenção é exibir os primeiros 32 caracteres (hash MD5) para que a saída seja parecida com esta:

416d76b8811b0ddae2fdad8f4721ddbe 56a99a4205a4d6cab2dcae414a5670fd

Alguma ideia?

Rising Lee
fonte
7
Leia esta breve introdução ao Python e role até a metade. "Corte de cordas" é o que você deseja.
Joel Cornett
11
the_string[:32]
JBernardo
2
Corte de cordas e como abrir arquivos se você ainda não leu
César
2
Você provavelmente também vai se interessar pelos métodos .split()e .strip()das strings. Por exemplo, md5, sha1, sha5 = line.strip().split("|")faz praticamente o que você acha que faria.
DSM
1
Obrigado por seus comentários pessoal eu finalmente fiz funcionar. Eu tentei todos os métodos e parece que o TankorSmash funciona mais conveniente para mim. Agradeço a ajuda de cada um!
Rising Lee

Respostas:

186

Você pode 'fatiar' stringmuito facilmente, da mesma forma que puxaria itens de um list:

a_string = 'This is a string'

Para obter as primeiras 4 letras:

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

Ou os últimos 5:

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

Então, aplicando essa lógica ao seu problema:

the_string = '416d76b8811b0ddae2fdad8f4721ddbe|d4f656ee006e248f2f3a8a93a8aec5868788b927|12a5f648928f8e0b5376d2cc07de8e4cbf9f7ccbadb97d898373f85f0a75c47f '
first_32_chars = the_string[:32]
>>> 416d76b8811b0ddae2fdad8f4721ddbe
TankorSmash
fonte
1
the_string.split ('|') [0]
César
3
@ César: geralmente é melhor (e mais rápido) mostrar o fato de que você só precisa da primeira parte da corda dividida com the_string.split('|', 1)[0].
Eric O Lebigot
16

Como há um delimitador, você deve usá-lo em vez de se preocupar com o tamanho do md5.

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

alternativamente

>>> md5sum, sha1sum, sha5sum = s.split('|')
>>> md5sum
'416d76b8811b0ddae2fdad8f4721ddbe'
>>> sha1sum
'd4f656ee006e248f2f3a8a93a8aec5868788b927'
>>> sha5sum
'12a5f648928f8e0b5376d2cc07de8e4cbf9f7ccbadb97d898373f85f0a75c47f'
John La Rooy
fonte
2
+1 por considerar o material delimitador para hash de comprimento variável :-)
Vinayak Kolagi
0

Se você quiser as 2 primeiras letras e as 2 últimas letras de uma string, poderá usar o seguinte código: name = "India" name[0:2]="In" names[-2:]="ia"

Darshan Jain
fonte