Az alábbiakban az újsorokat tartalmazó karakterláncok működését ismertetjük Pythonban.
- Újsorokat tartalmazó karakterlánc létrehozása, kimenet nyomtatása (display)
- újsor karakter (a rendszertől függően a CR és az LF karakterek egyike vagy mindkettő)
\n
(LF),\r\n
(CR+LF) - hármas idézet
'''
,"""
- Ha be akarja vonni
- újsor karakter (a rendszertől függően a CR és az LF karakterek egyike vagy mindkettő)
- Sztringek listájának összekapcsolása újsorral
- A karakterlánc felosztása újsorokra és listára:
splitlines()
- Vonaltovábbítási kódok eltávolítása és cseréje
- Kimenet nyomtatása újsor nélkül
Újsorokat tartalmazó karakterlánc létrehozása, kimenet nyomtatása
újsor karakter (a rendszertől függően a CR és az LF karakterek egyike vagy mindkettő) \n(LF), \r\n(CR+LF)
Ha egy karakterláncon belül beilleszt egy sortávirányító kódot, az egy új sort eredményez.
s = 'Line1\nLine2\nLine3'
print(s)
# Line1
# Line2
# Line3
s = 'Line1\r\nLine2\r\nLine3'
print(s)
# Line1
# Line2
# Line3
A sortávirányító kódok a következő módon használhatók. Egyes szerkesztők lehetővé teszik a sortörés kódjának kiválasztását.
Macを含むUnix系 | \n (LF) |
Windows系 | \r\n (CR+LF) |
hármas idézet ''',"""
Ha a karakterláncot háromszoros idézőjelekbe zárja, akkor a karakterlánc változatlanul karakterlánc lesz, beleértve az újsorokat is.
s = '''Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3
Ha be akarja vonni
A hármas idézőjelek is szóközök egy karakterláncban, így ha megpróbálsz szépen írni a kódban, és behúzod az alábbiakban látható módon, felesleges szóközök kerülnek be.
s = '''
Line1
Line2
Line3
'''
print(s)
#
# Line1
# Line2
# Line3
#
Ha a backslash használatával figyelmen kívül hagyjuk az újsorokat a kódban, és folytatásos sornak tekintjük, akkor a következőképpen írhatjuk le a kódot
Minden sort zárjon be '' vagy “” betűvel, és a mondat végére tegyen egy újsor karaktert ←n.
s = 'Line1\n'\
'Line2\n'\
'Line3'
print(s)
# Line1
# Line2
# Line3
Itt a szintaxis szerint az egymást követő karakterlánc literálok össze vannak fűzve. A részleteket lásd a következő cikkben.
Ha behúzást akarsz hozzáadni egy karakterlánchoz, csak adj hozzá egy szóközt a karakterlánchoz minden sorban.
s = 'Line1\n'\
' Line2\n'\
' Line3'
print(s)
# Line1
# Line2
# Line3
Továbbá, mivel a zárójelekben szabadon lehet sortörést végezni, a következőket zárójelek helyett zárójelekkel írhatjuk.
s = ('Line1\n'
'Line2\n'
'Line3')
print(s)
# Line1
# Line2
# Line3
s = ('Line1\n'
' Line2\n'
' Line3')
print(s)
# Line1
# Line2
# Line3
Ha csak a sor elejét akarja igazítani, csak adjon egy backslash-t a hármas idézőjelek első sorához.
s = '''\
Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3
s = '''\
Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3
Sztringek listájának összekapcsolása újsorral
A join() karakterlánc-módszer karakterláncok listájának egyetlen karakterlánccá történő összekapcsolására használható.
Ha a join() parancsot egy újsor karakterrel hívjuk meg, akkor minden egyes string elemet egy újsorral kapcsolunk össze.
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'
A fenti példához hasonlóan a beépített repr() függvény használható az újsor kódokat tartalmazó karakterláncok ellenőrzésére.
A karakterlánc felosztása újsorokra és listára: splitlines()
A string metódus splitlines() használható egy string felosztására újsorok listájára.
A splitlines() a következő sormegszakítási kódok bármelyikét szétválasztja. A függőleges tabulátorok és az oldaltörések is felosztásra kerülnek.
\n
\r\n
\v
\f
s = 'Line1\nLine2\r\nLine3'
print(s.splitlines())
# ['Line1', 'Line2', 'Line3']
Vonaltovábbítási kódok eltávolítása és cseréje
A splitlines() és a join() kombinálásával lehetővé válik az újsor kódok eltávolítása (eltávolítása) egy újsorokat tartalmazó karakterláncból, vagy azok más karakterláncokkal való helyettesítése.
s = 'Line1\nLine2\r\nLine3'
print(''.join(s.splitlines()))
# Line1Line2Line3
print(' '.join(s.splitlines()))
# Line1 Line2 Line3
print(','.join(s.splitlines()))
# Line1,Line2,Line3
A sortávirányító kódok kötegelt módosítása is lehetséges. Még akkor is, ha a sortörőkódok vegyesek vagy ismeretlenek, a splitlines() segítségével szétválaszthatók, majd a kívánt sortörőkóddal összefűzhetők.
s_n = '\n'.join(s.splitlines())
print(s_n)
# Line1
# Line2
# Line3
print(repr(s_n))
# 'Line1\nLine2\nLine3'
Mint fentebb említettük, a splitlines() bármelyik újsoros kódot szétválasztja, így a splitlines() és a join() metódust kombináló módszer esetében nem kell különösebben aggódni az újsoros kódok miatt.
Ha az újsor kód egyértelmű, akkor a replace() metódussal is helyettesíthető, amely kicseréli a karakterláncot.
s = 'Line1\nLine2\nLine3'
print(s.replace('\n', ''))
# Line1Line2Line3
print(s.replace('\n', ','))
# Line1,Line2,Line3
Ne feledje azonban, hogy nem fog működni, ha a várttól eltérő sortovábbítási kódokat tartalmaz.
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'
Lehetséges több újsor kódot helyettesíteni a replace() ismétlésével, de ez nem fog működni, ha a sorrend rossz, mert a “\r\n” tartalmazza a “\n”-t. A fent leírt splitlines() és join() kombinációs módszer biztonságosabb, mert nem kell aggódni a sorváltó kódok miatt.
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
Az rstrip() metódussal eltávolíthatod a mondat végén lévő sorközöket. Az rstrip() metódus segítségével eltávolíthatod a karakterlánc jobb végén lévő fehér szóköz karaktereket (beleértve a sorközöket is).
s = 'aaa\n'
print(s + 'bbb')
# aaa
# bbb
print(s.rstrip() + 'bbb')
# aaabbb
Kimenet nyomtatása újsor nélkül
A print() függvény alapértelmezés szerint hozzáad egy új sort a sor végén. Ezért, ha a print() függvényt egymás után hajtjuk végre, minden kimeneti eredmény új sorban jelenik meg.
print('a')
print('b')
print('c')
# a
# b
# c
Ennek az az oka, hogy a print() parancs end argumentumának alapértelmezett értéke, amely a végén hozzáadandó karakterláncot adja meg, az újsor szimbólum.
Ha nem szeretné, hogy újsor legyen a végén, csak állítsa az end argumentumot üres karakterláncra, és a kimenet újsor nélkül fog kikerülni a végén.
print('a', end='')
print('b', end='')
print('c', end='')
# abc
Az argumentum end bármilyen karakterlánc lehet.
print('a', end='-')
print('b', end='-')
print('c')
# a-b-c
Ha azonban karakterláncokat akarunk összekapcsolni a kimenethez, egyszerűbb az eredeti karakterláncokat összekapcsolni, mint a print() végargumentumában megadni őket. Lásd a következő cikket.