Emettere, concatenare, dividere, cancellare e sostituire stringhe contenenti newline in Python

Attività commerciale

Quanto segue descrive il funzionamento delle stringhe contenenti newline in Python.

  • Crea una stringa contenente newlines, stampa l'output (display)
    • carattere newline (uno o entrambi CR e LF a seconda del sistema)\n(LF), \r\n(CR+LF)
    • tripla citazione''',"""
    • Se volete far rientrare
  • Concatenare un elenco di stringhe con newline
  • Dividere la stringa in newline ed elenco:splitlines()
  • Rimuovere e sostituire i codici di alimentazione di linea
  • Stampa l'output senza newline finali

Crea una stringa contenente newlines, stampa l'output

carattere newline (uno o entrambi CR e LF a seconda del sistema) \n(LF), \r\n(CR+LF)

Inserendo un codice di avanzamento di riga all'interno di una stringa si otterrà una nuova riga.

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

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

I codici di interruzione di riga possono essere usati nei seguenti modi. Alcuni editor permettono di selezionare un codice di interruzione di riga.

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

tripla citazione ''',"""

Se si usano le virgolette triple per racchiudere la stringa, sarà una stringa così com'è, comprese le newline.

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

Se volete far rientrare

Le virgolette triple sono anche spazi in una stringa, quindi se cercate di scrivere ordinatamente nel codice e indentate come mostrato qui sotto, verranno inseriti spazi non necessari.

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

Usando un backslash per ignorare le newline nel codice e renderlo una linea di continuazione, può essere scritto come segue

Chiudi ogni riga con '' o “” e aggiungi un carattere di newline ←n alla fine della frase.

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

Qui, la sintassi è che i letterali di stringa successivi sono concatenati. Vedi il seguente articolo per i dettagli.

Se volete aggiungere l'indentazione in una stringa, aggiungete semplicemente uno spazio alla stringa in ogni riga.

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

Inoltre, poiché le interruzioni di riga possono essere fatte liberamente nelle parentesi, quanto segue può essere scritto usando le parentesi invece delle backslash.

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

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

Se vuoi solo allineare l'inizio di una linea, basta aggiungere un backslash alla prima linea di apici tripli.

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

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

Concatenare un elenco di stringhe con newline

Il metodo stringa join() può essere usato per concatenare una lista di stringhe in una singola stringa.

Quando join() viene chiamata da un carattere newline, ogni elemento della stringa viene concatenato con un newline.

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'

Come nell'esempio precedente, la funzione incorporata repr() può essere usata per controllare le stringhe che contengono codici newline così come sono.

Dividere la stringa in newline ed elenco: splitlines()

Il metodo di stringa splitlines() può essere usato per dividere una stringa in una lista di newlines.

splitlines() dividerà uno qualsiasi dei seguenti codici di interruzione di riga. Anche le tabulazioni verticali e le interruzioni di pagina vengono divise.

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

Rimuovere e sostituire i codici di alimentazione di linea

Combinando splitlines() e join(), è possibile rimuovere (eliminare) i codici newline da una stringa contenente newline o sostituirli con altre stringhe.

s = 'Line1\nLine2\r\nLine3'

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

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

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

È anche possibile cambiare in batch i codici di interruzione di linea. Anche se i codici di interruzione di linea sono misti o sconosciuti, possono essere divisi usando splitlines() e poi concatenati con il codice di interruzione di linea desiderato.

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

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

Come detto sopra, splitlines() dividerà entrambi i codici newline, quindi non c'è bisogno di preoccuparsi particolarmente dei codici newline nel caso del metodo che combina splitlines() e join().

Se il codice newline è chiaro, può anche essere sostituito dal metodo replace(), che sostituisce la stringa.

s = 'Line1\nLine2\nLine3'

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

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

Notate, tuttavia, che non funzionerà se contiene codici di avanzamento di linea diversi da quelli previsti.

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'

È possibile sostituire più codici newline ripetendo replace(), ma non funzionerà se l'ordine è sbagliato perché “\r\n” contiene “\n”. Il metodo che combina splitlines() e join() descritto sopra è più sicuro perché non c'è bisogno di preoccuparsi dei codici di linea.

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

Usate il metodo rstrip() per rimuovere i codici di avanzamento di riga alla fine di una frase. rstrip() è un metodo per rimuovere i caratteri di spazio bianco (inclusi i feed di riga) alla fine destra di una stringa.

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

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

Stampa l'output senza newline finali

La funzione print() aggiunge un newline finale per impostazione predefinita. Pertanto, se print() viene eseguita in successione, ogni risultato di output sarà visualizzato su una nuova riga.

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

Questo perché il valore predefinito dell'argomento end di print(), che specifica la stringa da aggiungere alla fine, è il simbolo newline.

Se non volete una newline alla fine, impostate semplicemente l'argomento end a una stringa vuota, e l'output verrà emesso senza una newline alla fine.

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

L'argomento end può essere una qualsiasi stringa.

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

Tuttavia, se volete concatenare delle stringhe per l'output, è più facile concatenare le stringhe originali che specificarle nell'argomento finale di print(). Vedere il seguente articolo.

Copied title and URL