如何在字符串中的两个单词之间添加空格,以使字符串的总长度具有特定值

时间:2018-11-10 12:51:56

标签: python string python-3.x

我从字符串(信用卡号和有效期)开始,例如:

'378282246310005 Invalid',
'30569309025904 Invalid',
'6011111111111117 valid'

我想获得最终字符串,该字符串的总长度为40:

'378282246310005                  Invalid',
'30569309025904                   Invalid',
'6011111111111117                   valid'

除了Python字符串方法“ rjust”,“ ljust”和“ center”之外,是否有任何内置的字符串方法来完成此任务,或者我是否需要为此编写一些函数?

到目前为止,我已经尝试过:

string = '378282246310005 {} Invalid'
while len(string) < 40:
    string = string.format(' ')

不确定如何从这里进行。

3 个答案:

答案 0 :(得分:2)

这是使用str.splitstr.join的手动解决方案:

L = ['378282246310005 Invalid',
     '30569309025904 Invalid',
     '6011111111111117 valid']

def formatter(x):
    x_split = x.split()
    n = sum(map(len, x_split))
    return (' '*(40-n)).join(x_split)

print(*map(formatter, L), sep='\n')

378282246310005                  Invalid
30569309025904                   Invalid
6011111111111117                   valid

即使您的输入字符串包含多个空格,此方法也有效。

答案 1 :(得分:1)

您还可以使用Python 3的字符串格式:

>>> a = '378282246310005 Invalid'
>>> L = a.split()
>>> middle = 40 - len(L[0])
>>> print(L[0] + f'{L[1]: >{middle}}')
378282246310005                  Invalid

处理列表:

>>> for item in L:
...     item_split = item.split()
...     middle = 40 - len(item_split[0])
...     print(item_split[0] + f'{item_split[1]: >{middle}}')
... 
378282246310005                  Invalid
30569309025904                   Invalid
6011111111111117                   valid

答案 2 :(得分:1)

以下方法对您也将非常有帮助。

>>> p = 353535353535
>>>
>>> credit_card_no = 378282246310005
>>> status = "Invalid"
>>>
>>> s = str(credit_card_no)
>>> l = len(s)
>>>
>>> format_string = "{:<" + str(40 - len(status)) + "}" + status
>>>
>>> answer = format_string.format(s)
>>> answer
'378282246310005                  Invalid'
>>>
>>> len(answer)
40
>>>

最后,基于上述方法,我们可以编写如下所示的可重用函数。

def get_formatted_string(credit_card_no, status, width=40):
    s = str(credit_card_no)
    l = len(s)

    format_string = "{:<" + str(width - len(status)) + "}" + status
    answer = format_string.format(s)

    return answer

if __name__ == "__main__":
    inp1 = (378282246310005, 'Invalid')
    inp2 = (30569309025904, 'Invalid')
    inp3 = (6011111111111117, 'valid')

    print(get_formatted_string(*inp1))
    print(get_formatted_string(*inp2))
    print(get_formatted_string(*inp3))


# E:\Users\Rishikesh\Projects\Python3\try>python Stk_format_str.py
# 378282246310005                  Invalid
# 30569309025904                   Invalid
# 6011111111111117                   valid
参考书目»