Wyprowadzanie, konkatenacja, dzielenie, usuwanie i zastępowanie ciągów zawierających nowe linie w Pythonie

Biznes

Poniżej opisano działanie łańcuchów zawierających nowe linie w języku Python.

  • Utwórz łańcuch zawierający znaki nowej linii, wydrukuj dane wyjściowe (wyświetl)
    • znak nowej linii (albo CR albo LF, zależnie od systemu)\n(LF), \r\n(CR+LF)
    • potrójny cytat''',"""
    • Jeśli chcesz zastosować wcięcie
  • Złącz listę ciągów znaków z liniami nowej kolejności
  • Podziel łańcuch na nowe linie i listę:splitlines()
  • Usuń i wymień kody zasilania linii
  • Drukuj dane wyjściowe bez końcowego znaku nowej linii

Utwórz łańcuch zawierający znaki nowej linii, wydrukuj dane wyjściowe

znak nowej linii (albo CR albo LF, zależnie od systemu) \n(LF), \r\n(CR+LF)

Wstawienie kodu podawania wiersza wewnątrz łańcucha spowoduje utworzenie nowego wiersza.

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

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

Kody łamania linii mogą być używane w następujący sposób. Niektóre edytory umożliwiają wybranie kodu podziału wiersza.

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

potrójny cytat ''',"""

Jeśli do zamknięcia łańcucha użyto potrójnych cudzysłowów, będzie to łańcuch w takiej postaci, w jakiej występuje, łącznie z liniami nowej linii.

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

Jeśli chcesz zastosować wcięcie

Potrójne cudzysłowy są jednocześnie spacjami w łańcuchu, więc jeśli spróbujesz pisać starannie w kodzie i używać wcięć, jak pokazano poniżej, zostaną wstawione niepotrzebne spacje.

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

Używając odwrotnego ukośnika, aby zignorować nowe linie w kodzie i uczynić go linią kontynuacji, można go zapisać w następujący sposób

Otocz każdy wiersz znakiem '' lub „” i dodaj znak nowej linii ←n na końcu zdania.

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

W tym przypadku składnia jest taka, że kolejne literały łańcuchowe są konkatenowane. Szczegółowe informacje na ten temat można znaleźć w poniższym artykule.

Aby dodać wcięcie w łańcuchu, wystarczy dodać spację do łańcucha w każdym wierszu.

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

Ponadto, ponieważ w nawiasach można dowolnie tworzyć przerwy między wierszami, poniższy tekst można zapisać, używając nawiasów zamiast odwrotnych ukośników.

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

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

Jeśli chcesz tylko wyrównać początek wiersza, dodaj odwrotny ukośnik do pierwszego wiersza cudzysłowów potrójnych.

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

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

Złącz listę ciągów znaków z liniami nowej kolejności

Metoda join() może służyć do łączenia listy ciągów w jeden ciąg.

Gdy funkcja join() jest wywoływana ze znaku nowej linii, każdy element łańcucha jest konkatenowany z nową linią.

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'

Podobnie jak w powyższym przykładzie, wbudowana funkcja repr() może być użyta do sprawdzania łańcuchów zawierających kody nowej linii.

Podziel łańcuch na nowe linie i listę: splitlines()

Metoda łańcuchowa splitlines() może być użyta do podzielenia łańcucha na listę nowych linii.

splitlines() podzieli dowolny z poniższych kodów podziału wiersza. Pionowe tabulatory i podziały stron są również dzielone.

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

Usuń i wymień kody zasilania linii

Przez połączenie funkcji splitlines() i join() można usunąć (usunąć) kody nowych linii z łańcucha zawierającego nowe linie lub zastąpić je innymi łańcuchami.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Możliwa jest również wsadowa zmiana kodów linijek. Nawet jeśli kody podziału wiersza są mieszane lub nieznane, można je podzielić za pomocą funkcji splitlines(), a następnie połączyć z żądanym kodem podziału wiersza.

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

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

Jak wspomniano powyżej, funkcja splitlines() podzieli każdy kod nowej linii, więc nie ma potrzeby szczególnie przejmować się kodami nowej linii w przypadku metody łączącej splitlines() i join().

Jeśli kod nowej linii jest wyraźny, można go również zastąpić metodą replace(), która zastępuje łańcuch.

s = 'Line1\nLine2\nLine3'

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

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

Należy jednak pamiętać, że nie będzie on działał, jeśli będzie zawierał inne niż oczekiwane kody podawania wierszy.

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'

Możliwe jest zastąpienie wielu kodów nowej linii przez powtórzenie replace(), ale nie zadziała to, jeśli kolejność jest niepoprawna, ponieważ „\” zawiera „\”. Opisana powyżej metoda łącząca splitlines() i join() jest bezpieczniejsza, ponieważ nie trzeba się martwić o kody podawania linii.

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

Użyj metody rstrip(), aby usunąć kody pasków wiersza na końcu zdania. rstrip() jest metodą służącą do usuwania białych znaków spacji (w tym pasków wiersza) na prawym końcu łańcucha.

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

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

Drukuj dane wyjściowe bez końcowego znaku nowej linii

Funkcja print() domyślnie dodaje końcowy znak nowej linii. Dlatego jeśli funkcja print() zostanie wykonana po kolei, każdy wynik zostanie wyświetlony w nowej linii.

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

Dzieje się tak, ponieważ domyślną wartością argumentu end funkcji print(), określającego łańcuch, który ma zostać dodany na końcu, jest symbol nowej linii.

Jeśli nie chcesz wstawiać nowej linii na końcu, wystarczy, że ustawisz argument end na pusty łańcuch, a dane wyjściowe zostaną wysłane bez nowej linii na końcu.

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

Argument end może być dowolnym ciągiem znaków.

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

Jeśli jednak chcesz konkatenować ciągi znaków na wyjściu, łatwiej jest konkatenować oryginalne ciągi znaków, niż podawać je w argumencie końcowym funkcji print(). Zobacz następujący artykuł.