如何在字符串中两个单词之间添加空格,使得整个字符串的长度达到特定值。

3

我开始涉及字符串(信用卡号码和有效性状态),例如:

'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(' ')

不确定如何继续下一步。


1
你可以使用 replaces.replace(' ', ' ' * (40-len(s))) - 001
3个回答

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
工作了。非常感谢您的帮助! - Gustav Rasmussen

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

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

1
最后,@Gustav,我们可以拥有一个可重用的函数,我们可以使用有效的参数调用它以获得预期的格式化结果。我已经更新了我的答案,请查看。 - hygull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接