Заполнение строк в формате Python 2.7 с более чем одним символом - PullRequest
0 голосов
/ 29 мая 2018

Проблема

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

Пример вывода

Что я смог получить

****************************Hello World***************************

... пытаясь получить

* * * * * * * * * * * * * * Hello World* * * * * * * * * * * * * *

Попытки

Наивно я пытался передать " *" параметру заполнения спецификаций формата.Это вернулось с ошибкой:

Traceback (most recent call last): File "main.py", line 17, in <module> ret_string = '*{:{f}^{n}}'.format(string, f=filler, n=line_len) ValueError: Invalid conversion specification

Затем я попытался использовать escape-символ "\s*", который дал тот же результат.Наконец, я снова посетил документацию 6.1.3.1.Спецификация формата Mini-Language и видим, что спецификация ввода ограничена символом и не открыта для строк.Это можно обойти?Я думал о создании своего рода составной ссылки, например, {{char1}{char2}}, но это тоже не сработало.

Мысли?

Код

import fileinput

string     = "Hello World"
ret_string = ""
line_len   = 65
filler    = " *"


for inputstring in fileinput.input():
    string = inputstring.strip(" \n")

ret_string = '{:{f}^{n}}'.format(string, f=filler, n=line_len)
print(ret_string)

Ответы [ 3 ]

0 голосов
/ 29 мая 2018
padding = "".join(["* "]*10)
print(padding + "hello " + padding)
0 голосов
/ 29 мая 2018

Следующее будет работать для двух шаблонов заливки символов:

string = "Hello World"
length = 65
fill = "* "

output = string.center(length, '\x01').replace('\x01\x01', fill).replace('\x01', fill[0])
print(len(output), output)

В Python есть функция center(), которая будет дополнять строку одним символом ввода символов.Затем вы можете заменить серии 2 на ваш шаблон заполнения.Это может привести к единственному символу, поэтому для этой возможности используется вторая замена.Он использует символ \x01 как символ, который вряд ли будет в string.

Длина output напечатана, чтобы доказать, что это правильная длина.

65 * * * * * * * * * * * * * *Hello World* * * * * * * * * * * * * *
0 голосов
/ 29 мая 2018

Вы можете использовать эту маленькую функцию, чтобы делать то, что вы хотите, но я не думаю, что вы можете сделать это с помощью str.format:

def multi_char_pad(s, f, n):
    to_pad = n - len(s)
    pre = to_pad // 2
    post = to_pad - pre
    f_len = len(f)
    pre_s = f * (pre // f_len) + f[:pre % f_len]
    post_s = f * (post // f_len) + f[:post % f_len]
    return pre_s + s + post_s

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

...