Esses dias surgiu uma dúvida na lista Django Brasil sobre como formatar um arquivo de saída com campos de largura fixa e, dando continuidade ao objetivo desse blog de fornecer dicas para iniciantes em Python, vou transcrever o que rolou.
O Luiz Carlos enviou a seguinte pergunta:
Boa tarde, pessoal.
Estou desenvolvendo um layout de arquivo para um Sistema Legado, o
arquivo deve ter por linha 400 colunas
Que assume diversas posições alguem sabe como fazer isso e os espaços
devem continuar brancos
Consigo gerar o arquivo mas fica tudo uma bagunça...
Precisaria determinar o tamanho e deixar os espaços em branco...
Desde de já agradeço atenção
Luiz Carlos
A resposta do Luciano Ramalho foi uma aula:
Luiz Carlos, o Julio Nobrega recomendou o método ljust, mas eu prefiroFica aí mais uma dica para iniciantes em Python.
é usar o operador de formatação de strings, que é mais prático e mais
flexível.
Veja na documentação do Python a seção "string formatting operations"
http://docs.python.org/library/stdtypes.html#string-formatting
Basicamente, funciona assim: para cada variável que você quer colocar
na linha, coloca um marcador %s, %d, %f (tem outros, mas estes são os
mais comuns) e depois passa como argumento para o operador uma tupla
de valores que serão encaixados respectivamente nos lugares marcados.
Por exemplo, suponha que você tem itens de um pedido:
>>> fmt = '%3d %-20s %8.2f %8.2f'
>>> fmt % (3, 'micos amestrados', 620, 3*620)
' 3 micos amestrados 620.00 1860.00'
>>> fmt % (18, 'sapos cantores', 17, 18*17)
' 18 sapos cantores 17.00 306.00'
No formato acima, temos:
%3d- exibir número inteiro em base decimal, em campo de 3 espaços de
largura, alinhado à direita
%-20s- exibir string em campo de 20 espaços, alinhada à direita (é o
que faz o sinal - na frente do 20)
%8.2f- exibir número de ponto flutuante em campo de 8 casas de
largura, com duas casas após o ponto decimal, alinhado à direita
[ ]s
Luciano