Emiterea, concatenarea, divizarea, ștergerea și înlocuirea șirurilor care conțin linii noi în Python

Afaceri

În cele ce urmează este descrisă funcționarea în Python a șirurilor de caractere care conțin linii noi.

  • Creați un șir de caractere care conține linii noi, imprimați ieșirea (afișare)
    • caracter de linie nouă (CR și LF sau ambele, în funcție de sistem)\n(LF), \r\n(CR+LF)
    • citat triplu''',"""
    • Dacă doriți să indentați
  • Concatenează o listă de șiruri de caractere cu linii noi
  • Împarte șirul în linii noi și listă:splitlines()
  • Îndepărtarea și înlocuirea codurilor de alimentare a liniei
  • Imprimă ieșirea fără linia nouă la sfârșit

Creați un șir de caractere care conține linii noi, imprimați ieșirea

caracter de linie nouă (CR și LF sau ambele, în funcție de sistem) \n(LF), \r\n(CR+LF)

Inserarea unui cod de salt de linie în interiorul unui șir de caractere va avea ca rezultat o nouă linie.

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

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

Codurile de avans de linie pot fi utilizate în următoarele moduri. Unii editori vă permit să selectați un cod de întrerupere a liniei.

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

citat triplu ''',"""

În cazul în care se utilizează ghilimele triple pentru a include șirul, acesta va fi un șir ca atare, inclusiv liniile noi.

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

Dacă doriți să indentați

Ghilimelele triple sunt, de asemenea, spații într-un șir de caractere, astfel încât, dacă încercați să scrieți ordonat în cod și să indentați așa cum se arată mai jos, vor fi inserate spații inutile.

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

Utilizând o backslash pentru a ignora liniile noi din cod și pentru a face din aceasta o linie de continuare, se poate scrie după cum urmează

Închideți fiecare rând cu '' sau „” și adăugați un caracter de linie nouă ←n la sfârșitul propoziției.

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

În acest caz, sintaxa constă în concatenarea șirurilor literale succesive. Pentru detalii, consultați următorul articol.

Dacă doriți să adăugați o indentare într-un șir de caractere, adăugați un spațiu la fiecare rând.

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

În plus, având în vedere că în paranteze se pot face libere întreruperi de linie, ceea ce urmează poate fi scris folosind paranteze în loc de backslash-uri.

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

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

Dacă doriți doar să aliniați începutul unei linii, adăugați doar o backslash la prima linie de ghilimele triple.

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

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

Concatenează o listă de șiruri de caractere cu linii noi

Metoda join() poate fi utilizată pentru a concatena o listă de șiruri de caractere într-un singur șir.

Atunci când join() este apelat de la un caracter de linie nouă, fiecare element de șir este concatenat cu o linie nouă.

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'

La fel ca în exemplul de mai sus, funcția încorporată repr() poate fi utilizată pentru a verifica șirurile de caractere care conțin coduri newline așa cum sunt ele.

Împarte șirul în linii noi și listă: splitlines()

Metoda string splitlines() poate fi utilizată pentru a împărți un șir de caractere într-o listă de linii noi.

splitlines() va diviza oricare dintre următoarele coduri de întrerupere a liniei. Tabulatoarele verticale și pauzele de pagină sunt, de asemenea, divizate.

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

Îndepărtarea și înlocuirea codurilor de alimentare a liniei

Prin combinarea splitlines() și join(), este posibilă eliminarea (înlăturarea) codurilor de linii noi dintr-un șir care conține linii noi sau înlocuirea acestora cu alte șiruri.

s = 'Line1\nLine2\r\nLine3'

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

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

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

De asemenea, este posibilă modificarea pe loturi a codurilor de avansare a liniei. Chiar dacă codurile de întrerupere a liniei sunt amestecate sau necunoscute, acestea pot fi împărțite cu ajutorul funcției splitlines() și apoi concatenate cu codul de întrerupere a liniei dorit.

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

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

După cum s-a menționat mai sus, splitlines() va despărți orice cod newline, astfel încât nu este necesar să ne preocupăm în mod special de codurile newline în cazul metodei care combină splitlines() și join().

În cazul în care codul newline este clar, acesta poate fi, de asemenea, înlocuit prin metoda replace(), care înlocuiește șirul.

s = 'Line1\nLine2\nLine3'

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

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

Cu toate acestea, rețineți că nu va funcționa dacă conține coduri de avans de linie diferite de cele așteptate.

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'

Este posibil să se înlocuiască mai multe coduri de linie nouă prin repetarea replace(), dar nu va funcționa dacă ordinea este greșită, deoarece „\r\n” conține „\n”. Metoda care combină splitlines() și join() descrisă mai sus este mai sigură, deoarece nu este nevoie să vă faceți griji cu privire la codurile de avans de linie.

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

Utilizați metoda rstrip() pentru a elimina codurile de salt de linie de la sfârșitul unei propoziții. rstrip() este o metodă de eliminare a caracterelor de spațiu alb (inclusiv salturile de linie) de la capătul drept al unui șir de caractere.

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

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

Imprimă ieșirea fără linia nouă la sfârșit

Funcția print() adaugă în mod implicit o linie nouă la sfârșit. Prin urmare, dacă print() este executată succesiv, fiecare rezultat va fi afișat pe o linie nouă.

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

Acest lucru se datorează faptului că valoarea implicită a argumentului end din print(), care specifică șirul de caractere care urmează să fie adăugat la sfârșit, este simbolul newline.

Dacă nu doriți o linie nouă la sfârșit, este suficient să setați argumentul end la un șir de caractere gol, iar rezultatul va fi afișat fără o linie nouă la sfârșit.

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

Argumentul end poate fi orice șir de caractere.

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

Cu toate acestea, dacă doriți să concatenați șiruri de caractere pentru ieșire, este mai ușor să concatenați șirurile originale decât să le specificați în argumentul final al print(). Consultați următorul articol.