Produzir, concatenar, dividir, apagar e substituir cordas contendo novas linhas em Python

O negócio

O seguinte descreve a operação de cordas contendo novas linhas em Python.

  • Criar cadeia contendo novas linhas, imprimir saída (display)
    • novo carácter de linha (ou um ou ambos de CR e LF dependendo do sistema)\n(LF), \r\n(CR+LF)
    • citação tripla''',"""
    • Se quiser indentar
  • Concatenar uma lista de cordas com novas linhas
  • Dividir cadeia em novas linhas e lista:splitlines()
  • Retirar e substituir os códigos de alimentação de linha
  • Saída de impressão sem traçar nova linha

Criar cadeia contendo novas linhas, imprimir saída

novo carácter de linha (ou um ou ambos de CR e LF dependendo do sistema) \n(LF), \r\n(CR+LF)

A inserção de um código de alimentação de linha dentro de uma cadeia de caracteres resultará numa nova linha.

s = 'Line1\nLine2\nLine3'
print(s)
# Line1
# Line2
# Line3

s = 'Line1\r\nLine2\r\nLine3'
print(s)
# Line1
# Line2
# Line3

Os códigos de alimentação de linha podem ser utilizados das seguintes formas. Alguns editores permitem-lhe seleccionar um código de quebra de linha.

Macを含むUnix系\n(LF)
Windows系\r\n(CR+LF)

citação tripla ''',"""

Se forem usadas citações triplas para encerrar a cadeia, será uma cadeia como está, incluindo novas linhas.

s = '''Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3

Se quiser indentar

As aspas triplas são também espaços em cadeia, por isso, se tentar escrever ordenadamente em código e travessão como se mostra abaixo, serão inseridos espaços desnecessários.

s = '''
    Line1
    Line2
    Line3
    '''
print(s)
# 
#     Line1
#     Line2
#     Line3
#     

Utilizando uma barra invertida para ignorar novas linhas no código e torná-lo uma linha de continuação, pode ser escrito da seguinte forma

Fechar cada linha com '' ou “” e adicionar um novo carácter de linha ←n no final da frase.

s = 'Line1\n'\
    'Line2\n'\
    'Line3'
print(s)
# Line1
# Line2
# Line3

Aqui, a sintaxe é que as sucessivas literaturas das cordas são concatenadas. Ver o artigo seguinte para detalhes.

Se quiser adicionar indentação numa corda, basta adicionar um espaço à corda em cada linha.

s = 'Line1\n'\
    '    Line2\n'\
    '        Line3'
print(s)
# Line1
#     Line2
#         Line3

Além disso, uma vez que as quebras de linha podem ser feitas livremente entre parênteses, o seguinte pode ser escrito usando parênteses em vez de contrabarragens.

s = ('Line1\n'
     'Line2\n'
     'Line3')
print(s)
# Line1
# Line2
# Line3

s = ('Line1\n'
     '    Line2\n'
     '        Line3')
print(s)
# Line1
#     Line2
#         Line3

Se quiser apenas alinhar o início de uma linha, basta adicionar uma barra invertida à primeira linha de aspas triplas.

s = '''\
Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3

s = '''\
Line1
    Line2
        Line3'''
print(s)
# Line1
#     Line2
#         Line3

Concatenar uma lista de cordas com novas linhas

O método string join() pode ser usado para concatenar uma lista de cordas numa única corda.

Quando join() é chamado a partir de um carácter de nova linha, cada elemento de corda é concatenado com uma nova linha.

l = ['Line1', 'Line2', 'Line3']

s_n = '\n'.join(l)
print(s_n)
# Line1
# Line2
# Line3

print(repr(s_n))
# 'Line1\nLine2\nLine3'

s_rn = '\r\n'.join(l)
print(s_rn)
# Line1
# Line2
# Line3

print(repr(s_rn))
# 'Line1\r\nLine2\r\nLine3'

Como no exemplo acima, a função repr() integrada pode ser utilizada para verificar as cadeias que contêm novos códigos de linha tal como eles são.

Dividir cadeia em novas linhas e lista: splitlines()

O método de cadeia dividida() pode ser usado para dividir uma cadeia em uma lista de novas linhas.

linhas divididas() irá dividir qualquer um dos seguintes códigos de quebra de linha. As separadores verticais e as quebras de página também são divididas.

  • \n
  • \r\n
  • \v
  • \f
s = 'Line1\nLine2\r\nLine3'
print(s.splitlines())
# ['Line1', 'Line2', 'Line3']

Retirar e substituir os códigos de alimentação de linha

Combinando linhas divididas() e join(), é possível remover (remover) códigos de novas linhas de uma cadeia contendo novas linhas ou substituí-las por outras cadeias de caracteres.

s = 'Line1\nLine2\r\nLine3'

print(''.join(s.splitlines()))
# Line1Line2Line3

print(' '.join(s.splitlines()))
# Line1 Line2 Line3

print(','.join(s.splitlines()))
# Line1,Line2,Line3

Também é possível a alteração dos códigos de alimentação de linha por lotes. Mesmo que os códigos de quebra de linha sejam mistos ou desconhecidos, podem ser divididos usando linhas divididas() e depois concatenados com o código de quebra de linha desejado.

s_n = '\n'.join(s.splitlines())
print(s_n)
# Line1
# Line2
# Line3

print(repr(s_n))
# 'Line1\nLine2\nLine3'

Como mencionado acima, as linhas divididas() dividirão os códigos de novas linhas, pelo que não há necessidade de estar particularmente preocupado com os códigos de novas linhas no caso do método que combina linhas divididas() e join().

Se o código da nova linha for claro, também pode ser substituído pelo método replace(), que substitui a cadeia de caracteres.

s = 'Line1\nLine2\nLine3'

print(s.replace('\n', ''))
# Line1Line2Line3

print(s.replace('\n', ','))
# Line1,Line2,Line3

Note-se, contudo, que não funcionará se contiver códigos de alimentação de linha diferentes dos esperados.

s = 'Line1\nLine2\r\nLine3'

s_error = s.replace('\n', ',')
print(s_error)
# ,Line3Line2

print(repr(s_error))
# 'Line1,Line2\r,Line3'

s_error = s.replace('\r\n', ',')
print(s_error)
# Line1
# Line2,Line3

print(repr(s_error))
# 'Line1\nLine2,Line3'

É possível substituir múltiplos códigos de novas linhas repetindo a substituição(), mas não funcionará se a ordem estiver errada porque “rn” contém “\n”. O método que combina linhas divididas() e join() descrito acima é mais seguro porque não há necessidade de se preocupar com os códigos de alimentação de linha.

s = 'Line1\nLine2\r\nLine3'

print(s.replace('\r\n', ',').replace('\n', ','))
# Line1,Line2,Line3

s_error = s.replace('\n', ',').replace('\r\n', ',')
print(s_error)
# ,Line3Line2

print(repr(s_error))
# 'Line1,Line2\r,Line3'

print(','.join(s.splitlines()))
# Line1,Line2,Line3

Utilize o método rstrip() para remover códigos de alimentação de linha no final de uma frase. rstrip() é um método para remover caracteres de espaço branco (incluindo alimentação de linha) na extremidade direita de uma cadeia de caracteres.

s = 'aaa\n'
print(s + 'bbb')
# aaa
# bbb

print(s.rstrip() + 'bbb')
# aaabbb

Saída de impressão sem traçar nova linha

A função print() acrescenta por defeito uma nova linha de traçado. Portanto, se a função print() for executada em sucessão, cada resultado de saída será exibido numa nova linha.

print('a')
print('b')
print('c')
# a
# b
# c

Isto porque o valor padrão do argumento final da impressão(), que especifica a cadeia a ser adicionada no final, é o símbolo da nova linha.

Se não quiser uma nova linha no final, basta definir o fim do argumento para uma linha vazia, e a saída será feita sem uma nova linha no final.

print('a', end='')
print('b', end='')
print('c', end='')
# abc

O fim do argumento pode ser qualquer fio.

print('a', end='-')
print('b', end='-')
print('c')
# a-b-c

No entanto, se quiser concatenar as cordas para a produção, é mais fácil concatenar as cordas originais do que especificá-las no argumento final da impressão(). Ver o artigo seguinte.

Copied title and URL