【问题标题】:How to use python to format strings with delimiter into columns如何使用python将带分隔符的字符串格式化为列
【发布时间】:2013-03-28 14:01:08
【问题描述】:

假设变量“info”具有以下字符串:

abc: 234234
aadfa: 235345
bcsd: 992

在python中,将“info”格式化为:

abc:    234234
aadfa:  235345
bcsd:   992

【问题讨论】:

  • 你能告诉我们你到目前为止做了什么吗?我很确定您需要遍历标签,找到最大长度,然后再次遍历标签,用足够的空间填充它们。

标签: python string string-formatting delimiter text-alignment


【解决方案1】:

这将起作用:

>>> s = """abc: 234234
... aadfa: 235345
... bcsd: 992"""
>>> print s
abc: 234234
aadfa: 235345
bcsd: 992

现在我们可以在新行和空间上拆分以获取每行的每个项目:

>>> pairs = [x.split() for x in s.split('\n') ]
>>> pairs
[['abc:', ' 234234'], ['aadfa:', ' 235345'], ['bcsd:', ' 992']]

现在格式化每个字符串:

>>> for pair in pairs:
...     print '{0:10} {1}'.format(pair[0], pair[1])
...
abc:        234234
aadfa:      235345
bcsd:       992

注意我们如何在字符串格式中使用{0:10}?这只是意味着用 10 个字符格式化该参数。

【讨论】:

    【解决方案2】:

    窃取@JoshSmeaton 的变量名:

    >>> pairs = map(str.split, text.splitlines())
    >>> max_len = max(len(pair[0]) for pair in pairs)
    >>> info = '\n'.join('{key:<{indent}}{val}'.format(key=k,
                                                       indent=max_len + 2,
                                                       val=v) for k, v in pairs)
    >>> print info
    abc:    234234
    aadfa:  235345
    bcsd:   992
    

    【讨论】:

      【解决方案3】:

      希望以下代码有所帮助。

      >>> import math
      >>> info = ["abc: 234234", "aadfa: 235345", "bcsd: 992"]
      >>> info = [item.split() for item in info]
      >>> maxlen = max([len(item[0]) for item in info])
      >>> maxlen = math.ceil(maxlen/8.0)*8
      >>> info = [item[0]+" "*(maxlen-len(item[0]))+item[1] for item in info]
      

      您可以控制最终长度的制作方式。

      【讨论】:

        猜你喜欢
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-01
        • 2019-12-20
        • 1970-01-01
        相关资源
        最近更新 更多