Ниже описана работа со строками, содержащими новые строки, в Python.
- Создать строку, содержащую новые строки, вывести вывод (display)
- символ новой строки (любой из CR и LF или оба в зависимости от системы)
\n
(LF),\r\n
(CR+LF) - тройная цитата
'''
,"""
- Если вы хотите сделать отступ
- символ новой строки (любой из 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(). См. следующую статью.