Produz os primeiros 100 caracteres em uma string

108

Pode parecer encontrar uma função substring em python.

Digamos que eu queira gerar os primeiros 100 caracteres em uma string, como posso fazer isso?

Eu quero fazer isso com segurança também, medindo se a string tem 50 caracteres, ela não deve falhar.

Blankman
fonte
2
O seguimento a esta pergunta é: Boa introdução para notação de fatia Python
Greg Hewgill
1
O que você quer dizer com "personagens"? Pontos de código, grupos de grafemas ou unidades de código? O fatiamento contará as unidades de código, que podem não dar o resultado desejado.
Philipp

Respostas:

168
print my_string[0:100]
icktoofay
fonte
5
também funciona para strings menores que 100, por exemplo print 'foo'[:100](note que len('foo')é 3, então mesmo quando foo[100]não funciona, funciona)
Rodrigo Laguna
67

Do tutorial de python :

Índices de fatia degenerados são tratados com elegância: um índice muito grande é substituído pelo tamanho da string , um limite superior menor que o limite inferior retorna uma string vazia.

Portanto, é seguro usar x[:100].

Czchen
fonte
27

Fácil:

print mystring[:100]
Arkady
fonte
7

Para responder à preocupação de Philipp (nos comentários), o fatiamento funciona bem para strings Unicode também

>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ

Se você deseja executar o código acima como um script, coloque esta linha no topo

# -*- coding: utf-8 -*-

Se o seu editor não salvar em utf-8, substitua a codificação correta

John La Rooy
fonte
2
Não depreciando sua resposta, mas há apenas 24 letras em grego, ςe σsão a mesma letra :-)
paxdiablo
4
@paxdiablo, doh! Eu os copiei da página da wikipedia. Sorte eu não ter nomeado a variável greek_alphabetentão :)
John La Rooy
4

O fatiamento de matrizes é feito com [first:last+1].

Um truque que costumo usar muito é indicar informações extras com reticências. Então, se o seu campo tiver cem caracteres, eu usaria:

if len(s) <= 100:
    print s
else:
    print "%s..."%(s[:97])

E sim, eu sei que ()é supérfluo neste caso para o %operador de formatação, é apenas o meu estilo.

paxdiablo
fonte
Eu acho que isso era para ser um alimento para reflexão, mas no caso do OP, eu provavelmente não sugeriria fazer isso. O resultado seria uma string que você teria que verificar se há conteúdo para aparar ainda mais ou algo parecido. Nesse caso, eu imagino que se queira que esse número seja variável e que o resultado sempre esteja correto, ou que o número seja fixo e o manuseio produza algo significativo, ou erro, ou retorne normalmente em caso de falha. Não consigo pensar em muitos casos, além de fornecer informações legíveis por humanos, em que gostaria de adicionar texto arbitrariamente a uma string.
3

A maioria dos exemplos anteriores gerará uma exceção caso sua string não seja longa o suficiente.

Outra abordagem é usar 'yourstring'.ljust(100)[:100].strip().

Isso lhe dará os primeiros 100 caracteres. Você pode obter uma string mais curta no caso dos últimos caracteres da string serem espaços.

Julien Kieffer
fonte
Obrigado. Estranho porque as melhores respostas sobre stackoverflow não são reconhecidas e votadas facilmente.
Basil Musa
2

A formatação de strings %é uma ótima maneira de lidar com isso. Aqui estão alguns exemplos.

O código de formatação é '%s'convertido '12345'em uma string, mas já é uma string.

>>> '%s' % '12345'

'12345'

'%.3s' especifica o uso apenas dos três primeiros caracteres.

>>> '%.3s' % '12345'

'123'

'%.7s'diz para usar os primeiros sete caracteres, mas existem apenas cinco. Sem problemas.

>>> '%.7s' % '12345'

'12345'

'%7s' usa até sete caracteres, preenchendo os caracteres ausentes com espaços à esquerda.

>>> '%7s' % '12345'

'  12345'

'%-7s' é a mesma coisa, exceto preencher os caracteres ausentes à direita.

>>> '%-7s' % '12345'

'12345  '

'%5.3' diz para usar os três primeiros caracteres, mas preencha com espaços à esquerda para um total de cinco caracteres.

>>> '%5.3s' % '12345'

'  123'

Mesma coisa, exceto preencher à direita.

>>> '%-5.3s' % '12345'

'123  '

Também pode lidar com vários argumentos!

>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)

'do u no 123 da 67 wae'

Se você precisar de ainda mais flexibilidade, também str.format()está disponível. Aqui está a documentação para ambos.

OrangeSherbet
fonte
0
[start:stop:step]

Portanto, se você quiser pegar apenas 100 primeiros caracteres, use your_string[0:100]ou your_string[:100] Se quiser pegar apenas o caractere na posição par, use. your_string[::2] Os "valores padrão" para o início são 0, para o final - len da string e para a etapa - 1. Então quando você não fornecer um de seus e colocar ':', ele usará o valor padrão.

Szymek G
fonte