Setja út, sameina, skipta, eyða og skipta um strengi sem innihalda nýjar línur í Python

Viðskipti

Eftirfarandi lýsir virkni strengja sem innihalda nýlínur í Python.

  • Búðu til streng sem inniheldur nýjar línur, prentúttak (skjár)
    • nýlínustafur (annaðhvort eða bæði af CR og LF eftir kerfi)\n(LF),\r\n(CR+LF)
    • þreföld tilvitnun'',"""
    • Ef þú vilt draga inn
  • Settu saman lista yfir strengi með nýjum línum
  • Skiptu streng í nýjar línur og listaðu:splitlines()
  • Fjarlægðu og skiptu um línustraumskóða
  • Prentaðu úttak án þess að fylgja nýrri línu

Búðu til streng sem inniheldur nýjar línur, prentúttak

nýlínustafur (annaðhvort eða bæði af CR og LF eftir kerfi)\n(LF),\r\n(CR+LF)

Ef línustraumskóði er settur inn í streng mun það leiða til nýrrar línu.

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

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

Hægt er að nota línustraumskóða á eftirfarandi hátt. Sumir ritstjórar leyfa þér að velja línuskilakóða.

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

þreföld tilvitnun'',"""

Ef þrefaldar gæsalappir eru notaðar til að umlykja strenginn, verður hann strengur eins og hann er, þar með talið nýlínur.

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

Ef þú vilt draga inn

Þrífaldar gæsalappir eru líka bil í streng, þannig að ef þú reynir að skrifa snyrtilega í kóða og inndrátt eins og sýnt er hér að neðan þá verða óþarfa bil sett inn.

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

Með því að nota skástrik til að hunsa nýjar línur í kóðanum og gera hann að framhaldslínu er hægt að skrifa það sem hér segir

Látið hverja línu fylgja með “ eða „“ og bætið við nýlínustaf ←n í lok setningar.

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

Hér er setningafræðin sú að röð strengjabókstafir eru samtengdir. Sjá eftirfarandi grein fyrir frekari upplýsingar.

Ef þú vilt bæta inndrætti í streng skaltu bara bæta bili við strenginn í hverri línu.

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

Þar að auki, þar sem hægt er að gera línuskil frjálslega innan sviga, er hægt að skrifa eftirfarandi með því að nota sviga í stað bakstrika.

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

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

Ef þú vilt bara samræma byrjun línu, bættu bara skástrik við fyrstu línuna af þreföldum gæsalöppum.

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

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

Settu saman lista yfir strengi með nýjum línum

Strengjaaðferðina join() er hægt að nota til að sameina lista yfir strengi í einn streng.

Þegar join() er kallað úr nýlínustaf er hver strengsþáttur tengdur við nýlínu.

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'

Eins og í dæminu hér að ofan er hægt að nota innbyggðu fallið repr() til að athuga strengi sem innihalda nýlínukóða eins og þeir eru.

Skiptu streng í nýjar línur og listaðu:splitlines()

Strengjaaðferðina splitlines() er hægt að nota til að skipta streng í lista yfir nýjar línur.

splitlines() mun skipta einhverjum af eftirfarandi línuskilakóðum. Lóðréttir flipar og síðuskil eru einnig skipt.

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

Fjarlægðu og skiptu um línustraumskóða

Með því að sameina splitlines() og join() er hægt að fjarlægja (fjarlægja) nýlínukóða úr streng sem inniheldur nýjar línur eða skipta þeim út fyrir aðra strengi.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Lotubreyting á línustraumskóðum er einnig möguleg. Jafnvel þó að línuskilakóðar séu blandaðir eða óþekktir, þá er hægt að skipta þeim með splitlines() og síðan tengja saman þeim línuskilakóða sem óskað er eftir.

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

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

Eins og nefnt er hér að ofan mun splitlines() skipta hvorum nýlínukóðanum sem er, svo það er engin þörf á að hafa sérstakar áhyggjur af nýlínukóðum þegar um er að ræða aðferðina sem sameinar splitlines() og join().

Ef nýlínukóðinn er skýr er einnig hægt að skipta honum út fyrir replace() aðferðina, sem kemur í stað strengsins.

s = 'Line1\nLine2\nLine3'

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

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

Athugaðu samt að það virkar ekki ef það inniheldur aðra línustraumskóða en búist var við.

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'

Það er hægt að skipta út mörgum nýlínukóðum með því að endurtaka replace(), en það virkar ekki ef röðin er röng vegna þess að „\r\n“ inniheldur „\n“. Aðferðin sem sameinar splitlines() og join() sem lýst er hér að ofan er öruggari vegna þess að það er engin þörf á að hafa áhyggjur af línustraumskóðum.

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

Notaðu rstrip() aðferðina til að fjarlægja línustraumskóða í lok setningar. rstrip() er aðferð til að fjarlægja hvíta bilstafi (þar á meðal línustrauma) hægra megin á streng.

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

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

Prentaðu úttak án þess að fylgja nýrri línu

Print() aðgerðin bætir sjálfgefið við nýrri línu á eftir. Þess vegna, ef print() er keyrt í röð, mun hver úttaksniðurstaða birtast á nýrri línu.

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

Þetta er vegna þess að sjálfgefið gildi rifrildarinnar end of print(), sem tilgreinir strenginn sem á að bæta við í lokin, er nýlínutáknið.

Ef þú vilt ekki nýja línu í lokin skaltu bara stilla rifrildisendinn á tóman streng og úttakið verður gefið út án nýrrar línu í lokin.

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

Endir rifrilda getur verið hvaða strengur sem er.

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

Hins vegar, ef þú vilt sameina strengi fyrir úttak, þá er auðveldara að sameina upprunalegu strengina en að tilgreina þá í end-argumenti print(). Sjá eftirfarandi grein.