Újsorokat tartalmazó karakterláncok kimenete, összekapcsolása, szétválasztása, törlése és helyettesítése Pythonban

Üzleti

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
  • 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.

Copied title and URL