Estoy usando Python estándar del módulo de registro con el formateador personalizado donde yo límite de la longitud de algunos campos. Se utiliza el estándar de % Python operador.

Puedo aplicar el límite para el porcentaje de cadena con formato como este (este de los límites de longitud de 10 caracteres):

>>> "%.10s" % "Lorem Ipsum"
'Lorem Ipsu'

Es posible recortar desde el principio, por lo que el resultado es 'orem Ipsum' (sin manipular lado derecho argumento)?

Yo no creo que sea posible.

OriginalEl autor | 2014-10-23

3 Comentarios

  1. 6

    Es posible recortar desde el principio con % formato?

    Python % formato viene de C printf.

    Tenga en cuenta que el . indica la precisión de un flotador. Que trabaja en una cadena es un mero efecto secundario, y por desgracia, no hay ninguna disposición en el formato de cadena de especificación para dar cabida a pelar una cadena desde la izquierda a un fijo de anchura máxima.

    Por lo tanto, si usted tiene la tira de una cadena a un ancho fijo de la final, la recomiendo para cortar de un índice negativo. Esta operación es robusto, y no fallará si la cadena es de menos de 10 caracteres.

    >>> up_to_last_10_slice = slice(-10, None)
    >>> 'Lorem Ipsum'[up_to_last_10_slice]
    'orem Ipsum'
    >>> 'Ipsum'[up_to_last_10_slice]
    'Ipsum'

    str.format también no ayuda

    str.format es de ninguna ayuda aquí, el ancho es de un ancho mínimo:

    >>> '{lorem:>10}'.format(lorem='Lorem Ipsum')
    'Lorem Ipsum'
    >>> '{lorem:*>10}'.format(lorem='Lorem')
    '*****Lorem'

    (El asterisco, «*«, es el carácter de relleno.)

    De Bingo. La «precisión» de truncamiento de formato de cadena (% y .format() inherentemente quita de la mano derecha. Así que a menos que el uso de la cadena de truncamiento, la marcha atrás o la otra alternativa antes de enviar a formato, parece imposible.
    Es una lástima que la documentación es tan difícil de encontrar y es ilegible. Pero .format documentación está bastante bien documentado y fácil de leer. Habría sido más fácil para señalar que la documentación…
    El .format documentación es aquí si te gusta. Yo personalmente creo que es bastante denso y frustrante. OTOH, es una referencia más que un how-to-use, y la funcionalidad subyacente y las opciones son muchas y detalladas.
    No, no sé dónde que la documentación es. Es en realidad mucho más fácil de entender en comparación con printf docs. Pero para entender realmente lo que usted necesita para pasar algún tiempo con ella. Mismo con el resto de la lengua especificaciones: docs.python.org/reference/expressions.html

    OriginalEl autor Aaron Hall

  2. 5

    Esto se puede hacer fácilmente a través de la creación de divisiones, por lo que no requiere ningún formato de cadena de manipulación para hacer su TRABAJO

    >>> "Lorem Ipsum"[-10:]
    'orem Ipsum'
    Bueno para downvote si la respuesta no es útil, pero ¿se puede educar a mí ¿por qué es así?
    «(sin manipular lado derecho del argumento)»
    Sí, pero ese requisito no puede ser satisfecho.

    OriginalEl autor Abhijit

  3. 1

    Tenía la misma pregunta y me encontré con esta solución con LogRecordFactory.

    orig_factory = logging.getLogRecordFactory()
    
    def record_factory(*args, **kwargs):
        record = orig_factory(*args, **kwargs)
        record.sname = record.name[-10:] if len(
            record.name) > 10 else record.name
        return record
    
    logging.setLogRecordFactory(record_factory)

    Aquí estoy de truncar el nombre de 10 caracteres y su almacenamiento en el atributo sname, que puede ser utilizado como cualquier otro valor.

    %(sname)10s

    Es posible almacenar el nombre truncado en el registro.nombre, pero quería mantener el nombre original de todo también.

    OriginalEl autor Martin Wallgren

Dejar respuesta

Please enter your comment!
Please enter your name here