Рубрики
Без рубрики

Заполнение строк в Python

В этой статье мы рассмотрим, какие типы отступов существуют, и примеры того, как эффективно добавить их в Python с помощью ljust (), center (), rjust (), zfill() и format().

Автор оригинала: Muhammad Hashir Hassan.

Вступление

Заполнение строк относится к добавлению, как правило, неинформативных символов в строку на одном или обоих ее концах. Чаще всего это делается для форматирования и выравнивания выходных данных, но может иметь полезные практические применения.

Частым случаем использования заполняющих строк является вывод табличной информации табличным способом. Вы можете сделать это различными способами, включая использование панд для преобразования ваших данных в реальную таблицу. Таким образом, Python будет обрабатывать форматирование вывода самостоятельно.

В этой статье мы рассмотрим, как заполнять строки в Python.

Скажем, у нас есть эти три списка:

medicine1 = ['Morning', 'dispirine', '1 mg']
medicine2 = ['Noon', 'arinic', '2 mg']
medicine3 = ['Evening', 'Long_capsule_name', '32 mg']

Мы можем сформировать их в строку, используя функцию join() :

print(str.join(' ', medicine1))
print(str.join(' ', medicine2))
print(str.join(' ', medicine3))

Это дало бы нам довольно неопрятный результат:

Morning Dispirine 1 mg
Noon Arinic 2 mg
Evening Long_capsule_name 32 mg

Чтобы бороться с этим, мы могли бы написать for /| while циклы и добавлять пробелы к строкам, пока они не достигнут определенной длины, и убедиться, что все данные выровнены правильно для легкого визуального контроля. Или мы могли бы использовать встроенные функции, которые могут достичь той же цели.

В этой статье мы рассмотрим следующие функции: just() , center() , just() , fill() и format() . Любая из этих функций может быть использована для добавления определенного количества символов в любой конец строки, включая пробелы.

Типы прокладок

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

Левая Прокладка

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

Например, вам нужно назвать 11 файлов, и каждый из них начинается с числа от 1 до 11. Если вы просто добавите номер в начале файла, большинство операционных систем отсортируют файлы в следующем порядке: 1 , 10 , 11 , 2 , и так далее.

Это происходит, конечно, из-за правил лексикографической сортировки, но вы можете избежать этих ситуаций, называя файлы одним или несколькими ведущими нулями, в зависимости от того, сколько файлов вы ожидаете, т. е.: 01 , 02 , 03

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

Это дает эффект выравнивания строк по левому краю.

Центральная Прокладка

Это означает, что данный символ добавляется в равной мере к обеим сторонам строки до тех пор, пока новая строка не достигнет заданной длины. Используя это эффективно центрирует строку в заданной длине:

Правая Прокладка

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

Функции Python Для Заполнения Строк

Python предлагает множество функций для форматирования и обработки строк, их использование зависит от варианта использования и личных предпочтений разработчика. Большинство функций, которые мы обсудим, имеют дело с текстом justification , который, по сути, добавляет заполнение к одной стороне строки. Например, чтобы строка была выровнена по левому краю , нам нужно добавить отступ в конец (правую сторону) строки.

Примечание: Во всех функциях, ожидающих параметра width или len , в случае, если исходная строка длиннее указанной width или len , вся строка будет сохранена без изменений. Это может привести к нежелательному эффекту, когда длинные строки разрушают форматирование, поэтому при выборе значения width убедитесь, что вы учитываете самую длинную строку или верхнюю границу длины.

просто()

Функция ljust() выравнивает строку влево, добавляя правое заполнение.

Функция ljust() принимает два параметра: width и fillchar . Параметр width является обязательным и определяет длину строки после добавления отступа, в то время как второй параметр является необязательным и представляет символ, добавленный в исходную строку.

По умолчанию используется символ пробел , то есть '' . Это особенно хороший вариант для использования при печати табличных данных, как в нашем примере в начале:

medicine1 = ['Morning', 'Dispirine', '1 mg']
medicine2 = ['Noon', 'Arinic', '2 mg']
medicine3 = ['Evening', 'Long_capsule_name', '32 mg']

for medicine in [medicine1, medicine2, medicine3]:
    for entry in medicine:
        print(entry.ljust(25), end='')
    print()

Что дает нам выход:

Morning                  Dispirine                1 mg                     
Noon                     Arinic                   2 mg                     
Evening                  Long_capsule_name        32 mg 

центр()

Функция center() выравнивает строку по центру заданной ширины , добавляя отступы поровну с обеих сторон. Параметры те же, что и у функции just () , обязательный width и необязательный fillchar параметр:

list_of_strings = ["This can give us", "text that's center aligned", "within the specified width"]

for s in list_of_strings:
    print(s.center(50, ' '))

Выход:

                 This can give us                 
            text that's center aligned            
            within the specified width            

rjust()

Аналогично предыдущим двум функциям, just() выравнивает строку вправо, добавляя отступ слева (начало) строки.

Опять же, параметры являются обязательными width и необязательными fillchar . Как мы уже упоминали ранее, эта функция очень полезна при именовании файлов, которые начинаются с чисел, из-за более интуитивной сортировки:

list_of_names_original = []
list_of_names_padded = []

for n in range(1, 13):
    list_of_names_original.append(str(n) + "_name")
    list_of_names_padded.append(str(n).rjust(2, '0') + "_name")

print("Lexicographical sorting without padding:")
print(sorted(list_of_names_original))
print()

print("Lexicographical sorting with padding:")
print(sorted(list_of_names_padded))

Запуск этого кода даст нам:

Lexicographical sorting without padding:
['10_name', '11_name', '12_name', '1_name', '2_name', '3_name', '4_name', '5_name', '6_name', '7_name', '8_name', '9_name']

Lexicographical sorting with padding:
['01_name', '02_name', '03_name', '04_name', '05_name', '06_name', '07_name', '08_name', '09_name', '10_name', '11_name', '12_name']

zfill()

Функция zfill() работает очень похоже на использование just() с нулем в качестве указанного символа. Он оставил заполнение данной строки нулями до тех пор, пока строка не достигнет заданной длины.

Разница лишь в том, что если наша строка начинается со знака плюс( + ) или минус ( - ), то заполнение начнется после этого знака:

neutral = '15'
positive = '+15'
negative = '-15'
length = 4

print(neutral.zfill(length))
print(positive.zfill(length+1))
print(negative.zfill(length+1))

Это делается для того, чтобы сохранить исходное значение числа в том случае, если строка была числом. Запуск этого кода даст нам:

0015
+0015
-0015

формат()

Функция format() является самой продвинутой в списке. Эта единственная функция может быть использована для левого, правого и даже центрального заполнения. Он также используется для другого форматирования , но мы только взглянем на функциональность заполнения, которую он предоставляет.

Он возвращает строку после форматирования указанных значений и помещения их в строковые заполнители, которые определяются {} .

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

print("Placeholders can given by {0}, or with {value}".format("adding a number", value="a named value"))
print("They can also be given {}, without adding a {} or {}".format("implicitly", "number", "name"))

Что дало бы нам:

Placeholders can given by adding a number, or with a named value
They can also be given implicitly, without adding a number or name

Эти заполнители допускают различные варианты форматирования. Давайте посмотрим, как мы можем достичь различных типов заполнения строк с помощью этих параметров:

  • Левое заполнение: Используйте > внутри заполнителя и числа, чтобы указать желаемую ширину, чтобы выровнять строку по правому краю (добавить символы в начале):

    Что дает нам:

  • Разбивочная прокладка: Аналогично, мы можем использовать ^ для разбивочной прокладки/выравнивания:

  • Правое заполнение: Используйте < внутри заполнителей для выравнивания строки по левому краю:

Вы также можете добавлять символы, отличные от пробелов, добавляя указанные символы перед > , ^ или < символ:

print('{:*^50}'.format('Center padding with a specific character'))
*****Center padding with a specific character*****

Подробнее о различных возможностях функции format() вы можете прочитать в нашем Руководстве по форматированию строк с помощью Python .

Вывод

Добавление отступов к строкам в Python-это относительно простой процесс, который может заметно повысить читабельность ваших выходных данных, особенно если данные, которые у вас есть, могут быть прочитаны в виде таблицы.

В этой статье мы рассмотрели функции ljust () , rjust () , center () , zfill() и format() как встроенные подходы к заполнению строк в Python.