Создание текста в несколько строк на языке Python

Раздел: Основы Python -> Форматирование строк

Основные способы создания многострочных строк

Как создать строку, содержащую несколько строк текста, с сохранением всех переносов?

Самый простой и читаемый способ - использовать тройные кавычки (''' или """). Всё, что находится между начальной и конечной тройными кавычками, включая переносы строк и пробелы, становится частью строки.


multiline = """Это первая строка.
Это вторая строка.
А это третья строка."""
print(multiline)
  

F строка python (f-строка в python)

Это первая строка.
Это вторая строка.
А это третья строка.
  

вывод данных в строку python (вывод данных в строку в python)

Если строка начинается сразу после открывающих кавычек, первая строка выводится без лишнего отступа. Однако при форматировании кода часто используют отступы, и они тоже попадают в строку, что может быть нежелательно. Решение - выравнивать строку по левому краю или применять textwrap.dedent.

Типичная ошибка: если внутри тройных кавычек есть лишние пробелы или табуляции в начале строк (из-за отступов в коде), они становятся частью строки. Также нельзя использовать закрывающие кавычки с отступом, иначе они не распознаются.

Решение: либо располагать закрывающие кавычки без отступа, либо использовать textwrap.dedent (см. раздел вариантов).

Как сделать длинную строку в коде без добавления реальных переносов в вывод?

Иногда нужно разбить длинный строковый литерал в коде на несколько строк для удобства чтения, но сам вывод должен быть одной строкой. Для этого в конце строки (кроме последней) ставится обратный слеш \, который «склеивает» строки.


long_line = "Это очень длинная строка, которая " \
           "разбита на несколько строк в исходном коде, " \
           "но в результате будет одной строкой."
print(long_line)
  

Python format method (метод format для строк python)

Это очень длинная строка, которая разбита на несколько строк в исходном коде, но в результате будет одной строкой.
  

Python текст в несколько строк (создание многострочных строк в python)

Проблема: после обратного слеша не должно быть пробелов или комментариев, иначе возникает синтаксическая ошибка. Также этот метод не подходит для создания строк с реальными переносами.

Как объединить несколько строковых литералов в одну без оператора +?

Python автоматически объединяет строковые литералы, если они находятся рядом (конкатенация по смежности). Это удобно для разбиения длинной строки без дополнительных операций.


concatenated = (
    "Это первая часть строки "
    "и это вторая часть, "
    "объединённые автоматически."
)
print(concatenated)
  

Python f name (f-строка с именем в python)

Это первая часть строки и это вторая часть, объединённые автоматически.
  

как добавить пробел в python (добавление пробела в строку python)

Ошибка: конкатенация по смежности работает только со строковыми литералами, не с переменными. Для переменных требуется оператор + или f-строки.

Как собрать многострочный текст из списка строк с разделителем?

Если строки заранее известны или генерируются динамически, удобно использовать метод str.join(). Он объединяет элементы списка (или другого итерируемого объекта) с указанным разделителем. В качестве разделителя часто выступает символ новой строки '\n'.


lines = ["Первая строка", "Вторая строка", "Третья строка"]
joined = '\n'.join(lines)
print(joined)
  

Python format named (форматирование с именованными аргументами в python)

Первая строка
Вторая строка
Третья строка
  

Нюанс: join не добавляет разделитель после последнего элемента. Если нужен перенос в конце, нужно добавить его вручную или сначала создать список с пустой строкой в конце.

Как удалить лишние отступы из многострочной строки, созданной с тройными кавычками?

При написании кода внутри функций или классов часто появляются отступы, которые нежелательно включать в строку. Встроенный модуль textwrap предоставляет функцию dedent(), которая убирает общий минимальный отступ из всех строк текста.


import textwrap

def example():
    multiline = textwrap.dedent("""\
        Первая строка
        Вторая строка
        Третья строка""")
    print(multiline)

example()
  
Первая строка
Вторая строка
Третья строка
  

Обратите внимание на обратный слеш после открывающих кавычек - он убирает начальный перенос строки, иначе первая строка была бы пустой.

Ошибка: если в тексте есть строки с разным отступом, dedent удаляет только минимальный общий отступ, остальные отступы сохраняются. Также важно использовать \ после открывающих кавычек, если не нужна пустая строка в начале.

Как использовать тройные кавычки для многострочных комментариев?

Хотя тройные кавычки обычно создают строки, их часто применяют для многострочных комментариев. Такая строка не присваивается переменной и игнорируется интерпретатором (если не является docstring функции/класса/модуля). Это не официальный способ комментирования, но широко распространён.


"""
Это многострочный комментарий.
Он не выполняет никакого кода.
"""
  

Расширенные примеры использования многострочных строк

Пример 1. Многострочная f-строка с вычислениями

Тройные кавычки можно комбинировать с префиксом f для интерполяции выражений.

Пример

name = "Алиса"
age = 30
multiline_f = f"""Имя: {name}
Возраст: {age + 1}
Город: Москва"""
print(multiline_f)
  
Имя: Алиса
Возраст: 31
Город: Москва
  

Пример 2. Raw-строка с тройными кавычками для регулярных выражений

Префикс r отключает экранирование обратной косой черты, что удобно для многострочных паттернов.

Пример

import re
pattern = r"""^([A-Z]+)\n
                 ([0-9]+)$"""
test = "ABC\n\n123"
match = re.search(pattern, test, re.MULTILINE)
print(match.group(1) if match else "Нет совпадения")
  
ABC
  

Пример 3. Динамическое создание многострочного текста с помощью join и генератора

Генератор списка или выражение-генератор позволяет формировать строки на лету.

Пример

n = 5
lines_gen = '\n'.join(f"Строка номер {i}" for i in range(1, n+1))
print(lines_gen)
  
Строка номер 1
Строка номер 2
Строка номер 3
Строка номер 4
Строка номер 5
  

Пример 4. Использование os.linesep для платформозависимых переносов

В некоторых случаях (например, при записи в файл в текстовом режиме) символ \n преобразуется автоматически. Для явного использования переноса текущей ОС применяют os.linesep.

Пример

import os
lines = ["Unix", "Windows", "Mac"]
joined_os = os.linesep.join(lines)
print(repr(joined_os))
  
'Unix\nWindows\nMac'  (на Unix-подобных системах)
  

Пример 5. Форматирование многострочного SQL-запроса с помощью textwrap.dedent и тройных кавычек

SQL-запросы часто пишут на нескольких строках, но отступы в коде не должны попадать в сам запрос.

Пример

import textwrap

query = textwrap.dedent("""\
    SELECT id, name
    FROM users
    WHERE age > 18
    ORDER BY name""")
print(query)
  
SELECT id, name
FROM users
WHERE age > 18
ORDER BY name
  

Создание многострочных строк в Python - comments

En
Python текст в несколько строк (python)