Utdata, sammanfoga, dela, ta bort och ersätta strängar som innehåller nya rader i Python

Företag

Följande beskriver hur strängar som innehåller nya rader fungerar i Python.

  • Skapa en sträng som innehåller nya rader, skriv ut utdata (display)
    • Nyradstecken (antingen CR eller LF eller båda, beroende på system).\n(LF), \r\n(CR+LF)
    • tredubbelt citat''',"""
    • Om du vill dra in
  • Sammanfoga en lista med strängar med nya rader
  • Dela strängen i nya rader och en lista:splitlines()
  • Ta bort och byt ut koder för linjetillförsel.
  • Skriv ut utdata utan avslutande nyrad

Skapa en sträng som innehåller nya rader, skriv ut utdata

Nyradstecken (antingen CR eller LF eller båda, beroende på system). \n(LF), \r\n(CR+LF)

Om du infogar en radmatningskod i en sträng kommer en ny rad att skapas.

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

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

Koder för radmatning kan användas på följande sätt. I vissa redigerare kan du välja en radbrytningskod.

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

tredubbelt citat ''',"""

Om tredubbla citationstecken används för att innesluta strängen kommer den att vara en sträng som den är, inklusive nya rader.

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

Om du vill dra in

Tredubbla citationstecken är också mellanslag i en sträng, så om du försöker skriva snyggt i koden och drar in som nedan, kommer onödiga mellanslag att infogas.

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

Genom att använda ett backslash för att ignorera nya rader i koden och göra den till en fortsättningsrad kan den skrivas på följande sätt

Inkludera varje rad med '' eller ”” och lägg till en ny rad ←n i slutet av meningen.

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

Här är syntaxen att på varandra följande stränglitteraler sammanlänkas. Se följande artikel för mer information.

Om du vill lägga till indrag i en sträng lägger du bara till ett mellanslag i strängen på varje rad.

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

Eftersom radbrytningar kan göras fritt i parenteser kan följande skrivas med hjälp av parenteser istället för backslashes.

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

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

Om du bara vill justera början av en rad lägger du bara till ett backslash på den första raden av trippelcitat.

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

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

Sammanfoga en lista med strängar med nya rader

Strängmetoden join() kan användas för att sammanfoga en lista med strängar till en enda sträng.

När join() anropas från ett nyradstecken, sammanfogas varje strängelement med ett nyradstecken.

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'

Som i exemplet ovan kan den inbyggda funktionen repr() användas för att kontrollera strängar som innehåller newline-koder som de är.

Dela strängen i nya rader och en lista: splitlines()

Strängmetoden splitlines() kan användas för att dela upp en sträng i en lista med nya rader.

splitlines() delar upp någon av följande radbrytningskoder. Vertikala flikar och sidbrytningar delas också.

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

Ta bort och byt ut koder för linjetillförsel.

Genom att kombinera splitlines() och join() är det möjligt att ta bort (ta bort) newline-koder från en sträng som innehåller newlines eller ersätta dem med andra strängar.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Det är också möjligt att ändra radmatningskoder i batch. Även om radbrytningskoderna är blandade eller okända kan de delas med hjälp av splitlines() och sedan sammanfogas med den önskade radbrytningskoden.

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

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

Som nämnts ovan kommer splitlines() att dela upp alla nyradskoder, så det finns ingen anledning att vara särskilt orolig för nyradskoder när metoden kombinerar splitlines() och join().

Om koden för nya rader är tydlig kan den också ersättas med metoden replace(), som ersätter strängen.

s = 'Line1\nLine2\nLine3'

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

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

Observera dock att det inte kommer att fungera om det innehåller andra ramavtalsbeteckningar än de förväntade.

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'

Det är möjligt att ersätta flera nyradskoder genom att upprepa replace(), men det fungerar inte om ordningen är felaktig eftersom ”\r\n” innehåller ”\n”. Metoden som kombinerar splitlines() och join() som beskrivs ovan är säkrare eftersom man inte behöver oroa sig för radmatningskoder.

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

Använd metoden rstrip() för att ta bort radmatningskoder i slutet av en mening. rstrip() är en metod för att ta bort vitrymdstecken (inklusive radmatningskoder) i slutet av en sträng.

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

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

Skriv ut utdata utan avslutande nyrad

Funktionen print() lägger som standard till en avslutande nyrad. Om print() körs i följd kommer därför varje utdataresultat att visas på en ny rad.

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

Detta beror på att standardvärdet för argumentet end i print(), som anger den sträng som ska läggas till i slutet, är symbolen newline.

Om du inte vill ha en ny rad i slutet, sätt bara argumentet end till en tom sträng, så kommer utmatningen att ske utan en ny rad i slutet.

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

Argumentet end kan vara vilken sträng som helst.

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

Om du vill sammanfoga strängar för utskrift är det dock lättare att sammanfoga de ursprungliga strängarna än att ange dem i slutargumentet för print(). Se följande artikel.