2012-07-22 17 views
11

¿Hay una función en Python, incorporada o en la biblioteca estándar, para tapar una cadena a una determinada longitud, y si se excedió la longitud, añada tres puntos (. ..) ¿después de?Función Python para tapar una cadena a una longitud máxima

Por ejemplo:

 
>>> hypothetical_cap_function("Hello, world! I'm a string", 10) 
"Hello, ..." 
>>> hypothetical_cap_function("Hello, world! I'm a string", 20) 
"Hello, world! I'm..." 
>>> hypothetical_cap_function("Hello, world! I'm a string", 50) 
"Hello, world! I'm a string" 

Respuesta

20
def cap(s, l): 
    return s if len(s)<=l else s[0:l-3]+'...' 
+0

Tomaré eso como ** no ** para que esté en la biblioteca estándar. Gracias por la función :) – Hubro

+0

@RussellBorogove: Gracias - Edité eso ... Buena captura :) –

1

forma Probablemente el más flexibile (corto de tan sólo rebanar) es la creación de una envoltura alrededor de textwrap.wrap tales como: (tenga en cuenta, sin embargo, no trata de ser inteligente sobre la división en algunos lugares que no puede conseguir exactamente el resultado que está buscando - pero es un módulo muy útil para saber acerca)

def mywrap(string, length, fill=' ...'): 
    from textwrap import wrap 
    return [s + fill for s in wrap(string, length - len(fill))] 

s = "Hello, world! I'm a string" 
print mywrap(s, 10) 
# ['Hello, ...', 'world! ...', "I'm a ...", 'string ...'] 

Luego solo toma los elementos que buscas.

Cuestiones relacionadas