una recortar funcion formateo concatenar comparar cadenas cadena python string-formatting

recortar - funcion format en python



¿Cómo alinear una cadena de ancho fijo? (7)

Definitivamente prefiero el método de format , ya que es muy flexible y se puede extender fácilmente a sus clases personalizadas definiendo __format__ o las representaciones str o repr . En aras de mantenerlo simple, estoy usando print en los siguientes ejemplos, que pueden ser reemplazados por sys.stdout.write .

Ejemplos simples: alineación / llenado

#Justify / ALign (left, mid, right) print("{0:<10}".format("Guido")) # ''Guido '' print("{0:>10}".format("Guido")) # '' Guido'' print("{0:^10}".format("Guido")) # '' Guido ''

Podemos agregar al lado de la align especifica que son ^ , < y > un personaje de relleno para reemplazar el espacio por cualquier otro personaje

print("{0:.^10}".format("Guido")) #..Guido...

Ejemplos de entrada múltiple: alinee y complete muchas entradas

print("{0:.<20} {1:.>20} {2:.^20} ".format("Product", "Price", "Sum")) #''Product............. ...............Price ........Sum.........''

Ejemplos avanzados

Si tiene sus clases personalizadas, puede definir sus representaciones str o repr siguiente manera:

class foo(object): def __str__(self): return "...::4::.." def __repr__(self): return "...::12::.."

Ahora puede usar !s (str) o !r (repr) para decirle a python que llame a esos métodos definidos. Si no se define nada, Python se predetermina a __format__ que también se puede sobrescribir. x = foo ()

print "{0!r:<10}".format(x) #''...::12::..'' print "{0!s:<10}".format(x) #''...::4::..''

Fuente: Referencia esencial de Python, David M. Beazley, 4ta edición

Solo quiero columnas de texto de ancho fijo, pero las cadenas están todas acolchadas a la derecha, en vez de izquierda !!

sys.stdout.write("%6s %50s %25s/n" % (code, name, industry))

produce

BGA BEGA CHEESE LIMITED Food Beverage & Tobacco BHP BHP BILLITON LIMITED Materials BGL BIGAIR GROUP LIMITED Telecommunication Services BGG BLACKGOLD INTERNATIONAL HOLDINGS LIMITED Energy

pero queremos

BGA BEGA CHEESE LIMITED Food Beverage & Tobacco BHP BHP BILLITON LIMITED Materials BGL BIGAIR GROUP LIMITED Telecommunication Services BGG BLACKGOLD INTERNATIONAL HOLDINGS LIMITED Energy


Esta versión usa el método str.format .

Python 2.7 y versiones posteriores

sys.stdout.write("{:<7}{:<51}{:<25}/n".format(code, name, industry))

Versión Python 2.6

sys.stdout.write("{0:<7}{1:<51}{2:<25}/n".format(code, name, industry))

ACTUALIZAR

Anteriormente, había una declaración en los documentos acerca de que el operador% se eliminaría del idioma en el futuro. Esta declaración ha sido eliminada de los documentos .


Este trabajó en mi script python:

print "/t%-5s %-10s %-10s %-10s %-10s %-10s %-20s" % (thread[0],thread[1],thread[2],thread[3],thread[4],thread[5],thread[6])


Puede prefijar el requisito de tamaño con - justificar a la izquierda:

sys.stdout.write("%-6s %-50s %-25s/n" % (code, name, industry))


Una solución alternativa ligeramente más legible:
sys.stdout.write(code.ljust(5) + name.ljust(20) + industry)

Tenga en cuenta que ljust(#ofchars) usa caracteres de ancho fijo y no se ajusta dinámicamente como las otras soluciones.


Use -50% vez de +50% Se alinearán a la izquierda.


sys.stdout.write("%-6s %-50s %-25s/n" % (code, name, industry))

en una nota lateral puede hacer que el ancho sea variable con *-s

>>> d = "%-*s%-*s"%(25,"apple",30,"something") >>> d ''apple something ''