Výstup, spojování, rozdělování, mazání a nahrazování řetězců obsahujících nové řádky v jazyce Python

Podnikání

Následující text popisuje práci s řetězci obsahujícími nové řádky v jazyce Python.

  • Vytvoření řetězce obsahujícího nové řádky, tisk výstupu (zobrazení)
    • znak nového řádku (v závislosti na systému buď CR, nebo LF).\n(LF), \r\n(CR+LF)
    • trojitá citace''',"""
    • Pokud chcete odsadit
  • spojit seznam řetězců s novými řádky
  • Rozdělení řetězce na nové řádky a seznam:splitlines()
  • Odstranění a nahrazení kódů řádkového posuvu
  • Tisk výstupu bez koncového nového řádku

Vytvoření řetězce obsahujícího nové řádky, tisk výstupu

znak nového řádku (v závislosti na systému buď CR, nebo LF). \n(LF), \r\n(CR+LF)

Vložením kódu pro posuv řádku do řetězce vznikne nový řádek.

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

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

Kódy řádkového posuvu lze použít následujícími způsoby. Některé editory umožňují zvolit kód zalomení řádku.

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

trojitá citace ''',"""

Pokud je řetězec uzavřen trojitými uvozovkami, bude to řetězec tak, jak je, včetně nových řádků.

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

Pokud chcete odsadit

Trojité uvozovky jsou také mezery v řetězci, takže pokud se snažíte psát úhledně v kódu a odsazovat, jak je uvedeno níže, budou vloženy zbytečné mezery.

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

Pomocí zpětného lomítka, které ignoruje nové řádky v kódu a dělá z něj pokračovací řádek, jej lze zapsat takto

Každý řádek uzavřete znakem '' nebo „“ a na konec věty přidejte znak nového řádku ←n.

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

Syntaxe je zde taková, že se po sobě jdoucí řetězcové literály spojují. Podrobnosti naleznete v následujícím článku.

Pokud chcete přidat odsazení do řetězce, stačí přidat mezeru do řetězce na každém řádku.

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

Vzhledem k tomu, že v závorkách lze navíc libovolně provádět zalomení řádků, lze následující text zapsat pomocí závorek namísto zpětných lomítek.

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

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

Pokud chcete pouze zarovnat začátek řádku, stačí přidat zpětné lomítko na první řádek trojitých uvozovek.

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

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

spojit seznam řetězců s novými řádky

Metodu join() lze použít ke spojení seznamu řetězců do jednoho řetězce.

Při volání funkce join() ze znaku nového řádku se každý prvek řetězce spojí s novým řádkem.

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'

Stejně jako ve výše uvedeném příkladu lze vestavěnou funkci repr() použít ke kontrole řetězců, které obsahují kódy nových řádků tak, jak jsou.

Rozdělení řetězce na nové řádky a seznam: splitlines()

Metodu splitlines() lze použít k rozdělení řetězce na seznam nových řádků.

splitlines() rozdělí kterýkoli z následujících kódů zalomení řádku. Svislé tabulátory a stránkové zlomy jsou také rozděleny.

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

Odstranění a nahrazení kódů řádkového posuvu

Kombinací funkcí splitlines() a join() lze z řetězce obsahujícího nové řádky odstranit (odstranit) kódy nových řádků nebo je nahradit jinými řetězci.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Dávková změna kódů řádkového posuvu je rovněž možná. I když jsou kódy zalomení řádků smíšené nebo neznámé, lze je rozdělit pomocí funkce splitlines() a poté spojit s požadovaným kódem zalomení řádků.

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

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

Jak bylo uvedeno výše, metoda splitlines() rozdělí jakýkoli kód nového řádku, takže v případě metody kombinující splitlines() a join() není třeba se kódem nového řádku nijak zvlášť zabývat.

Pokud je kód nového řádku jasný, lze jej také nahradit metodou replace(), která řetězec nahradí.

s = 'Line1\nLine2\nLine3'

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

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

Všimněte si však, že nebude fungovat, pokud bude obsahovat jiné kódy řádkového posuvu, než se očekává.

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'

Je možné nahradit více kódů nového řádku opakováním replace(), ale nebude to fungovat, pokud je pořadí špatné, protože „\r\n“ obsahuje „\n“. Výše popsaná metoda kombinující splitlines() a join() je bezpečnější, protože není třeba se starat o kódy řádkového posuvu.

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

Metoda rstrip() slouží k odstranění kódů řádkového posuvu na konci věty. rstrip() je metoda pro odstranění bílých znaků (včetně řádkového posuvu) na pravém konci řetězce.

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

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

Tisk výstupu bez koncového nového řádku

Funkce print() ve výchozím nastavení přidává koncový nový řádek. Pokud je tedy funkce print() spuštěna postupně, každý výsledek výstupu se zobrazí na novém řádku.

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

Je to proto, že výchozí hodnotou argumentu end funkce print(), který určuje řetězec, který má být přidán na konec, je symbol nového řádku.

Pokud nechcete mít na konci nový řádek, stačí nastavit argument end na prázdný řetězec a výstup bude vypsán bez nového řádku na konci.

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

Argument end může být libovolný řetězec.

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

Pokud však chcete řetězce pro výstup spojit, je jednodušší spojit původní řetězce, než je zadávat do koncového argumentu funkce print(). Viz následující článek.