Salida de los primeros 100 caracteres en una cadena

108

Parece que puede encontrar una función de subcadena en Python.

Digamos que quiero generar los primeros 100 caracteres en una cadena, ¿cómo puedo hacer esto?

También quiero hacerlo de manera segura, lo que significa que si la cadena tiene 50 caracteres, no debería fallar.

Blankman
fuente
2
El seguimiento de esta pregunta es: Buen manual para la notación de cortes de Python
Greg Hewgill
1
¿Qué quieres decir con "personajes"? ¿Puntos de código, grupos de grafemas o unidades de código? El corte contará las unidades de código, que pueden no dar el resultado deseado.
Philipp

Respuestas:

168
print my_string[0:100]
icktoofay
fuente
5
también funciona para cadenas de menos de 100, por ejemplo print 'foo'[:100](tenga en cuenta que len('foo')es 3, por lo que incluso cuando foo[100]no funciona, lo hace)
Rodrigo Laguna
67

Desde el tutorial de Python :

Los índices de sectores degenerados se manejan con elegancia: un índice que es demasiado grande se reemplaza por el tamaño de la cadena , un límite superior más pequeño que el límite inferior devuelve una cadena vacía.

Entonces es seguro de usar x[:100].

czchen
fuente
27

Fácil:

print mystring[:100]
Arkady
fuente
7

Para responder a la preocupación de Philipp (en los comentarios), el corte también funciona bien para cadenas Unicode

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

Si desea ejecutar el código anterior como un script, coloque esta línea en la parte superior

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

Si su editor no guarda en utf-8, sustituya la codificación correcta

John La Rooy
fuente
2
No menosprecio tu respuesta, pero solo hay 24 letras en griego, ςy σson la misma letra :-)
paxdiablo
4
@paxdiablo, ¡eh! Los copié de la página de wikipedia. Por suerte no nombré la variable greek_alphabetentonces :)
John La Rooy
4

El corte de matrices se realiza con [first:last+1] .

Un truco que suelo usar mucho es indicar información adicional con puntos suspensivos. Entonces, si su campo tiene cien caracteres, usaría:

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

Y sí, sé ()que en este caso es superfluo para el %operador de formato, es solo mi estilo.

paxdiablo
fuente
Supongo que esto fue pensado como motivo de reflexión, pero en el caso del OP probablemente no sugeriría hacerlo. El resultado sería una cadena que tendría que verificar el contenido para recortar más o algo así. En este caso, me imagino que uno querría que ese número sea variable y que el resultado sea siempre correcto, o que el número sea fijo y el manejo produzca algo significativo, o error o regrese con gracia en caso de falla. No puedo pensar en muchos casos, aparte de la entrega de información legible por humanos, en los que me gustaría agregar texto arbitrariamente a una cadena.
3

La mayoría de los ejemplos anteriores generarán una excepción en caso de que su cadena no sea lo suficientemente larga.

Otro enfoque es utilizar 'yourstring'.ljust(100)[:100].strip().

Esto le dará los primeros 100 caracteres. Es posible que obtenga una cadena más corta en caso de que los últimos caracteres de su cadena sean espacios.

Julien Kieffer
fuente
Gracias. Es extraño que las mejores respuestas sobre stackoverflow no sean reconocidas y votadas fácilmente.
Basil Musa
3

Formateo de cadenas usando % es una excelente manera de manejar esto. Aquí hay unos ejemplos.

El código de formato se '%s'convierte '12345'en una cadena, pero ya es una cadena.

>>> '%s' % '12345'

'12345'

'%.3s' especifica usar solo los primeros tres caracteres.

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

'123'

'%.7s'dice usar los primeros siete caracteres, pero solo hay cinco. No hay problema.

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

'12345'

'%7s' utiliza hasta siete caracteres, llenando los caracteres faltantes con espacios a la izquierda.

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

'  12345'

'%-7s' es lo mismo, excepto que se completan los caracteres que faltan a la derecha.

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

'12345  '

'%5.3' dice que use los primeros tres caracteres, pero llénelos con espacios a la izquierda para un total de cinco caracteres.

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

'  123'

Lo mismo excepto el relleno a la derecha.

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

'123  '

¡También puede manejar múltiples argumentos!

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

'do u no 123 da 67 wae'

Si necesita aún más flexibilidad, también str.format()está disponible. Aquí hay documentación para ambos.

NaranjaSherbet
fuente
0
[start:stop:step]

Entonces, si desea tomar solo el primer carácter 100, use your_string[0:100]o your_string[:100] Si desea tomar solo el carácter en la posición par, use your_string[::2] Los "valores predeterminados" para el inicio es 0, para el final de la cadena y para el paso - 1. Entonces cuando no proporcionas uno de sus y pones ':', usará su valor predeterminado.

Szymek G
fuente