Output, sammenkædning, opdeling, deling, sletning og erstatning af strenge med newlines i Python

Forretning

I det følgende beskrives, hvordan strenge, der indeholder newlines, skal behandles i Python.

  • Opret en streng, der indeholder nye linjer, udskriv output (display)
    • newline-tegn (enten CR eller LF eller begge, afhængigt af systemet)\n(LF), \r\n(CR+LF)
    • tredobbelt citat''',"""
    • Hvis du ønsker at indrykke
  • Sammenkædning af en liste af strenge med nye linjer
  • Opdele streng i newlines og liste:splitlines()
  • Fjern og udskift koder for linjeføring
  • Udskriv output uden afsluttende newline

Opret en streng, der indeholder nye linjer, udskriv output

newline-tegn (enten CR eller LF eller begge, afhængigt af systemet) \n(LF), \r\n(CR+LF)

Indsættelse af en linjefodskode i en streng resulterer i en ny linje.

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

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

Linjeføringskoder kan bruges på følgende måder. Nogle editorer giver dig mulighed for at vælge en linjeskiftskode.

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

tredobbelt citat ''',"""

Hvis der anvendes tredobbelte anførselstegn til at omslutte strengen, vil den være en string som den er, inklusive newlines.

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

Hvis du ønsker at indrykke

Tredobbelte anførselstegn er også mellemrum i en streng, så hvis du forsøger at skrive pænt i kode og indrykke som vist nedenfor, vil der blive indsat unødvendige mellemrum.

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

Ved at bruge en backslash til at ignorere newlines i koden og gøre den til en fortsættelseslinje kan den skrives som følger

Hver linje omsluttes med '' eller “”, og der tilføjes et newline-tegn ←n i slutningen af sætningen.

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

Her er syntaksen, at på hinanden følgende strengliteraler sammenkædes. Se følgende artikel for nærmere oplysninger.

Hvis du ønsker at tilføje indrykning i en streng, skal du blot tilføje et mellemrum til strengen i hver linje.

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

Da linjeskift frit kan foretages i parenteser, kan følgende desuden skrives med parenteser i stedet for skråstreger.

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

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

Hvis du blot vil tilpasse begyndelsen af en linje, skal du blot tilføje en skråstreg i den første linje med tredobbelte anførselstegn.

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

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

Sammenkædning af en liste af strenge med nye linjer

Strengmetoden join() kan bruges til at sammenkæde en liste af strenge til en enkelt streng.

Når join() kaldes fra et newline-tegn, sammenkædes hvert strengelement med en 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'

Som i eksemplet ovenfor kan den indbyggede funktion repr() bruges til at kontrollere strenge, der indeholder newline-koder, som de er.

Opdele streng i newlines og liste: splitlines()

Strengmetoden splitlines() kan bruges til at opdele en streng i en liste af newlines.

splitlines() opdeler enhver af følgende linjeskiftskoder. Lodrette tabulatorer og sideskift deles også op.

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

Fjern og udskift koder for linjeføring

Ved at kombinere splitlines() og join() er det muligt at fjerne (fjerne) newline-koder fra en streng, der indeholder newlines, eller erstatte dem med andre strenge.

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 er også muligt at ændre linjefodskoder i batch. Selv hvis linjeskiftskoderne er blandede eller ukendte, kan de opdeles ved hjælp af splitlines() og derefter sammenkædes med den ønskede linjeskiftskode.

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

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

Som nævnt ovenfor vil splitlines() opdele enhver newline-kode, så der er ingen grund til at være særligt bekymret for newline-koder i tilfælde af metoden, der kombinerer splitlines() og join().

Hvis newline-koden er tydelig, kan den også erstattes af metoden replace(), som erstatter strengen.

s = 'Line1\nLine2\nLine3'

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

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

Bemærk dog, at det ikke vil fungere, hvis det indeholder andre linjefodskoder end forventet.

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 er muligt at erstatte flere newline-koder ved at gentage replace(), men det vil ikke fungere, hvis rækkefølgen er forkert, fordi “\r\n” indeholder “\n”. Metoden, der kombinerer splitlines() og join() som beskrevet ovenfor, er mere sikker, fordi der ikke er behov for at bekymre sig om linjefodskoder.

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

Brug metoden rstrip() til at fjerne linjeskiftkoder i slutningen af en sætning. rstrip() er en metode til at fjerne hvide mellemrums tegn (herunder linjeskift) i højre ende af en streng.

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

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

Udskriv output uden afsluttende newline

Funktionen print() tilføjer som standard en afsluttende newline. Hvis print() udføres efter hinanden, vil hvert outputresultat derfor blive vist på en ny linje.

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

Det skyldes, at standardværdien af argumentet end i print(), som angiver den streng, der skal tilføjes i slutningen, er newline-symbolet.

Hvis du ikke ønsker en newline i slutningen, skal du blot indstille argumentet end til en tom streng, og output vil blive outputet uden en newline i slutningen.

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

Argumentet end kan være en vilkårlig streng.

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

Hvis du imidlertid ønsker at sammenkæde strenge til output, er det lettere at sammenkæde de originale strenge end at angive dem i slutargumentet for print(). Se følgende artikel.

Copied title and URL