Как напечатать табуляцию в Python

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

Содержание

Как напечатать табуляцию в Python

Для вывода табуляции используется символ \t. Например, print('bobby\thadz'). Символ \t внутри строки является управляющей последовательностью для символа табуляции.

string = 'bobby\thadz'
print(string)  # 👉️ bobby   hadz

print(repr('\t'))  # 👉️ '\t'

tab = '\t'

string = f'bobby{tab}hadz'
print(string)  # 👉️ bobby   hadz


first = 'bobby'
last = 'hadz'

print(first + '\t' + last)  # 👉️ bobby   hadz

print('a', 'b', 'c', sep='\t')  # 👉️ 'a       b       c'
Вывод приведенного выше кода в редакторе


Если вам нужно просто напечатать табуляцию, используйте символ \t в строке.

string = 'bobby\thadz'
print(string)  # 👉️ bobby   hadz

Если вам нужно напечатать саму управляющую последовательность для символа табуляции, передайте строку функции repr().

print(repr('\t'))  # 👉️ '\t'

Печать табуляции при форматировании строки

Для добавления табуляции при форматировании строки используйте f-строки.

От редакции Pythonist: подробнее о форматировании читайте в статье «Форматирование строк в Python: format() и f-строки».

tab = '\t'

string = f'bobby{tab}hadz'
print(string)  # 👉️ bobby   hadz
Вывод приведенного выше кода в редакторе


Обратите внимание, что мы сохранили символ \t в переменной. Это связано с тем, что f-строки не могут содержать символы обратной косой черты в выражениях.

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

tab = '\t'
first = 'bobby'
last = 'hadz'

string = f'{first}{tab}{last}'
print(string) # 👉️ bobby   hadz

Обязательно заключайте выражения в фигурные скобки — {expression}.

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

first = 'bobby'
last = 'hadz'
salary = 50

string = f"{first}\t{last}\t{salary}"

print(string) # 👉️ bobby   hadz    50

Вывод табуляции при форматировании строки с помощью str.format()

В качестве альтернативы можно использовать метод str.format(). Он выполняет операции форматирования строк.

first = 'bobby'
last = 'hadz'

string = '{}\t{}'.format(first, last)

print(string) # 👉️ bobby   hadz
Вывод приведенного выше кода в редакторе


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

Печать табуляции с помощью оператора сложения

Также для форматирования строк с табуляцией можно применять оператор сложения (+).

first = 'bobby'
last = 'hadz'
age = 30

# 👇️ bobby   hadz    30
print(first + '\t' + last + '\t' + str(age))
Вывод приведенного выше кода в редакторе


Оператор сложения используется для конкатенации строк.

Однако необходимо убедиться, что значения с левой и правой стороны оператора имеют тип string. Если у вас есть значения другого типа, используйте класс str(), чтобы преобразовать их в строки.

Если вам при печати нужно разделить несколько значений табуляцией, используйте аргумент sep функции print().

print('a', 'b', 'c', sep='\t')  # 👉️ 'a       b       c'

Аргумент sep — это разделитель между аргументами, которые мы передаем в функцию print().

print('bobby', 'hadz', sep='')  # 👉️ bobbyhadz

print('bobby', 'hadz')  # 👉️ bobby hadz

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

Объединение списка строк с табуляцией в качестве разделителя

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

От редакции Pythonist: подробнее об объединении и разделении строк читайте в статье «Строковые методы split() и join() в Python».

a_list = ['bobby', 'hadz', 'com']

result = '\t'.join(a_list)
print(result) # 👉️ bobby   hadz    com
Вывод приведенного выше кода в редакторе


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

Обратите внимание, что метод выдает ошибку типа TypeError, если в итерируемом объекте есть значения, не являющиеся строками.

Если итерируемый объект содержит числа или данные других типов, преобразуйте их все в строки перед вызовом join().

a_list = ['bobby', 1, 'hadz', 2, 'com']

result = '\t'.join(str(item) for item in a_list)
print(result) # 👉️ bobby   1       hadz    2       com

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

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

a_list = ['bobby', 1, 'hadz']

result = a_list[0] + '\t' + str(a_list[1]) + '\t' + a_list[2]
print(result)  # 👉️ bobby   1    hadz

Обратите внимание, что чтобы использовать оператор сложения, нам пришлось при помощи str() преобразовать целочисленное значение в строку.

Индексация в Python начинается с нуля, поэтому первый элемент списка имеет индекс 0, а последний элемент — -1 или len(my_list) - 1.

Получение строки с длиной N и выравниванием по левому краю

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

my_list = ['ab', 'abcd', 'abcdefg']

for item in my_list:
    print(f'{item.ljust(10)} another')

# ab         another
# abcd       another
# abcdefg    another
Вывод приведенного выше кода в редакторе


Метод str.ljust выравнивает конец строки до указанной ширины с помощью символа заполнения.

Этот метод принимает два аргумента: width (общая длина вставляемой строки) и fillchar (символ, которым нужно заполнить строку).

Если символ заполнения не указан, строка заполняется пробелами.

Вставка табуляции в существующую строку по определенному индексу

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

string = 'bobbyhadz'

new_string = string[:5] + '\t' + string[5:]
print(new_string)  # 👉️ bobby   hadz

Синтаксис для нарезки строк таков: my_str[start:stop:step].

Индекс start является инклюзивным, а индекс stop — эксклюзивным (до, но не включая).

Помним, что индексация начинается с нуля, поэтому первый символ в строке имеет индекс 0, а последний — -1 или len(my_str) - 1.

Срез string[:5] начинается с индекса 0 и идет до индекса 5, но не включает его.

Срез string[5:] начинается с индекса 5 и идет до конца строки.

Запись в файл значений, разделенных символами табуляции

Чтобы записать значения, разделенные табуляцией, в файл, выполните следующие действия:

  1. Откройте файл в режиме записи.
  2. Используйте символ \t, чтобы вставить табуляцию в строку.
  3. Используйте метод file.write(), чтобы записать строку в файл.
# ✅ write strings separated by tabs to file
with open('example.txt', 'w', encoding='utf-8') as my_file:
    my_file.write('bobby' + '\t' + 'hadz' + '\n')
    my_file.write('first\tsecond')


# ✅ separate the items of a list by tabs and write the result to a file
with open('example.txt', 'w', encoding='utf-8') as my_file:
    my_list = ['bobby', 'hadz', 'com']

    my_file.write('\t'.join(my_list) + '\n')

Для открытия файла в режиме записи мы использовали оператор with. Он позаботится об автоматическом закрытии файла.

От редакции Pythonist: подробнее о работе с файлами читайте в статье «Чтение и запись файлов в Python».

Если вам нужно просто вставить табуляцию в строку, используйте символ \t.

with open('example.txt', 'w', encoding='utf-8') as my_file:
    my_file.write('bobby' + '\t' + 'hadz' + '\n')
    my_file.write('first\tsecond')

Содержимое файла example.txt выглядит следующим образом:

bobby   hadz
first   second

Чтобы убедиться, что файл содержит табуляцию, можно прочитать его.

with open('example.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    print(lines) # 👉️ ['bobby\thadz\n', 'first\tsecond']

Символ \n служит для добавления перевода на новую строку.

Если вам нужно разделить элементы списка табуляциями и записать результат в файл, используйте метод str.join().

with open('example.txt', 'w', encoding='utf-8') as my_file:
    my_list = ['bobby', 'hadz', 'com']

    my_file.write('\t'.join(my_list) + '\n')

Метод str.join принимает в качестве аргумента итерируемый объект и возвращает строку, которая является конкатенацией строк из итерируемого объекта.

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

with open('example.txt', 'w', encoding='utf-8') as my_file:
    my_list = ['bobby', 1, 'hadz', 2, 'com']

    my_file.write('\t'.join(str(item) for item in my_list) + '\n')

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

Мы вызвали метод str.join() на строке — символе табуляции, чтобы соединить элементы списка через табуляцию.

Содержимое файла выглядит следующим образом:

bobby   1   hadz    2   com

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

with open('example.txt', 'w', encoding='utf-8') as my_file:
    my_list = ['bobby', 1, 'hadz', 2, 'com']

    my_file.write(
        my_list[0] + '\t' + str(my_list[1]) + '\t' +
        my_list[2] + '\t' + str(my_list[3]) + '\t' +
        my_list[4] + '\n'
    )

Не забывайте следить за тем, чтобы значения с левой и правой стороны оператора были строковыми. Значения других типов сначала нужно привести к типу string при помощи str().

Вы также можете использовать цикл for для итерации по списку и добавления табуляции после каждого элемента.

with open('example.txt', 'w', encoding='utf-8') as my_file:
    my_list = ['bobby', 1, 'hadz', 2, 'com']

    for word in my_list:
        my_file.write(str(word) + '\t')

    my_file.write('\n')

Цикл for перебирает элементы списка и использует оператор сложения для добавления табуляции после каждого элемента.

Последний шаг — запись символа новой строки (\n) в файл.

Как печатать пробелы в Python

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

print(' ')  # 👉️ ' '
print(' ' * 5)  # 👉️ '     '

print(repr(' '))  # 👉️ ' '
print(repr(' ' * 5))  # 👉️ '     '

space = ' '

print(f'bobby{space * 5}hadz')  # 👉️ 'bobby     hadz'

print('bobby' + ' ' * 5 + 'hadz')  # 👉️ 'bobby     hadz'

print('bobby', 'hadz', 'com')  # 👉️ bobby hadz com

Когда оператор умножения используется со строкой и целым числом, он повторяет строку указанное количество раз.

print(' ')  # 👉️ ' '
print(' ' * 5)  # 👉️ '     '

print(repr(' '))  # 👉️ ' '
print(repr(' ' * 5))  # 👉️ '     '

Используйте функцию repr(), если вам нужно напечатать кавычки вокруг строки, чтобы проверить ее длину.

Вы также можете сохранить пробел в переменной и умножать переменную на N.

space = ' '

print(space)  # 👉️ ' '
print(space * 5)  # 👉️ '     '

print(repr(space))  # 👉️ ' '
print(repr(space * 5))  # 👉️ '     '

Как напечатать пустую строку

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

print('before')

print()

print('after')

# before

# after

Печать пробелов при форматировании строки

Чтобы вывести пробелы между переменными или при форматировании строки, используйте f-строки.

space = ' '

print(f'bobby{space * 5}hadz')  # 👉️ 'bobby     hadz'

first = 'bobby'
last = 'hadz'

print(f'{first}{space * 5}{last}')  # 👉️ bobby     hadz

Обязательно заключайте выражения в фигурные скобки — {expression}.

var1 = 'bobby'
var2 = 'hadz'

result = f'{var1}{var2}'
print(result)  # 👉️ bobbyhadz

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

print(f'bobby{" " * 5}hadz')  # 👉️ 'bobby     hadz'

first = 'bobby'
last = 'hadz'

print(f'{first}{" " * 5}{last}')  # 👉️ bobby     hadz

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

Для печати пробелов можно также использовать оператор сложения.

first = 'bobby'
last = 'hadz'


print(first + ' ' * 5 + last)  # 👉️ bobby     hadz

print('bobby' + ' ' * 5 + 'hadz')  # 👉️ 'bobby     hadz'

Не забывайте о приведении типов.

print('Number:' + ' ' * 5 + str(100))  # 👉️ Number:     100

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

print('bobby', 'hadz', 'com')  # 👉️ bobby hadz com

Если в print() не передавать разделитель (аргумент sep), то по умолчанию в качестве разделителя используется пробел.

print('bobby', 'hadz', sep='')  # 👉️ bobbyhadz

print('bobby', 'hadz')  # 👉️ bobby hadz

Функция print() также принимает аргумент end. Он выводится в конце сообщения.

print('a', 'b', 'c')  # 👉️ 'a b c\n'

print('a', 'b', 'c', end='')  # 👉️ 'a b c'

По умолчанию end — это символ новой строки (\n).

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

Перевод статьи «How to print a Tab in Python».