Вывод, конкатенация, разбиение, удаление и замена строк, содержащих новые строки, в Python

Бизнес

Ниже описана работа со строками, содержащими новые строки, в Python.

  • Создать строку, содержащую новые строки, вывести вывод (display)
    • символ новой строки (любой из CR и LF или оба в зависимости от системы)\n(LF), \r\n(CR+LF)
    • тройная цитата''',"""
    • Если вы хотите сделать отступ
  • Конкатенация списка строк с новыми строками
  • Разделить строку на новую строку и список:splitlines()
  • Удалите и замените коды линейного питания
  • Печать вывода без концевой новой строки

Создать строку, содержащую новые строки, вывести вывод

символ новой строки (любой из CR и LF или оба в зависимости от системы) \n(LF), \r\n(CR+LF)

Вставка кода перевода строки в строку приведет к появлению новой строки.

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

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

Коды перевода строки можно использовать следующим образом. Некоторые редакторы позволяют выбрать код перевода строки.

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

тройная цитата ''',"""

Если для окружения строки используются тройные кавычки, то это будет строка как есть, включая новые строки.

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

Если вы хотите сделать отступ

Тройные кавычки также являются пробелами в строке, поэтому если вы попытаетесь писать аккуратно в коде и делать отступы, как показано ниже, будут вставлены ненужные пробелы.

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

Используя обратную косую черту, чтобы игнорировать новые строки в коде и сделать его строкой продолжения, его можно записать следующим образом

Окружите каждую строку символом '' или «» и добавьте символ новой строки ←n в конце предложения.

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

Здесь синтаксис заключается в том, что последовательные строковые литералы конкатенируются. Подробнее см. в следующей статье.

Если вы хотите добавить отступ в строке, просто добавьте пробел в строку в каждой строке.

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

Кроме того, поскольку в скобках можно произвольно делать переносы строк, следующее можно записать, используя круглые скобки вместо обратных слешей.

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

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

Если вы хотите просто выровнять начало строки, просто добавьте обратную косую черту к первой строке тройных кавычек.

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

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

Конкатенация списка строк с новыми строками

Строковый метод join() можно использовать для объединения списка строк в одну строку.

Когда функция join() вызывается с символа новой строки, каждый элемент строки конкатенируется с новой строкой.

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'

Как и в приведенном выше примере, встроенная функция repr() может быть использована для проверки строк, содержащих коды новой строки, как они есть.

Разделить строку на новую строку и список: splitlines()

Строковый метод splitlines() можно использовать для разбиения строки на список новых строк.

splitlines() разделит любой из следующих кодов перевода строки. Вертикальные табуляции и разрывы страниц также разделяются.

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

Удалите и замените коды линейного питания

Комбинируя splitlines() и join(), можно удалить (убрать) коды новой строки из строки, содержащей новые строки, или заменить их другими строками.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Также возможно пакетное изменение кодов перевода строки. Даже если коды перевода строки смешанные или неизвестные, их можно разделить с помощью splitlines(), а затем конкатенировать с нужным кодом перевода строки.

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

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

Как упоминалось выше, splitlines() разделит любой код новой строки, поэтому нет необходимости особенно беспокоиться о кодах новой строки в случае метода, объединяющего splitlines() и join().

Если код новой строки понятен, его также можно заменить методом replace(), который заменяет строку.

s = 'Line1\nLine2\nLine3'

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

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

Обратите внимание, однако, что он не будет работать, если он содержит коды перевода строки, отличные от ожидаемых.

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'

Можно заменить несколько кодов новой строки, повторяя replace(), но это не сработает, если порядок неправильный, потому что «\r\n» содержит «\n». Метод, сочетающий splitlines() и join(), описанный выше, более безопасен, так как нет необходимости беспокоиться о кодах перевода строки.

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

Используйте метод rstrip() для удаления кодов перевода строки в конце предложения. rstrip() — это метод удаления символов пробела (включая перевод строки) в правом конце строки.

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

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

Печать вывода без концевой новой строки

Функция print() по умолчанию добавляет новую строку. Поэтому, если функция print() выполняется последовательно, каждый результат вывода будет отображаться на новой строке.

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

Это происходит потому, что значением по умолчанию аргумента end в print(), который задает строку, добавляемую в конец, является символ новой строки.

Если вам не нужна новая строка в конце, просто установите аргумент end в пустую строку, и вывод будет осуществляться без новой строки в конце.

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

Аргумент end может быть любой строкой.

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

Однако если вы хотите объединить строки для вывода, проще объединить исходные строки, чем указывать их в конечном аргументе print(). См. следующую статью.

Copied title and URL