【问题标题】:Python: print a string spanning to a given width, but first part left-aligned and second part right-alignedPython:打印跨越给定宽度的字符串,但第一部分左对齐,第二部分右对齐
【发布时间】:2016-12-30 05:53:23
【问题描述】:

我想输出如下内容:

===>>> [FINISHED] Building sources: bla                               (1h:20m:30s)
===>>> [FINISHED] Building sources: The brown fox jumped...           (7h:05m:00s)

即填充N个字符宽度的字符串,第一部分左对齐,第二部分右对齐。

我在函数中有一个print,我只想获得一个易于阅读的输出。在脚本执行结束时,我会看到和上面一样的几行。

更多的cmets:

  • 字符串的两个部分加在一起永远不会超过N。
  • N 是一个常数值。
  • 我已经得到了这两个字符串,我不需要任何日期 格式化。

是否可以使用 Python 的字符串 `format ìn 以一种通用的方式做到这一点?比如:

N=80
first_part_of_the_string  = "===>>> [FINISHED] Building sources: " + some_random_text
second_part_of_the_string = my_function_to_convert_time_to_hms(time)

print("{<}{:N>}".format(first_part_of_the_string, second_part_of_the_string))

【问题讨论】:

  • 我将不胜感激任何来自失败选民的 cmets,谢谢! :)
  • 我没有投反对票,但我认为其他人在这个问题上遇到的问题是您似乎没有遵循提出问题的最佳做法:stackoverflow.com/help/how-to-ask。也就是说,您没有表明您已经尝试自己解决问题,或者在发布之前自己进行了研究。我同意在没有反馈的情况下投反对票不是很有用。
  • 我同意 elethan,而且您的规范也不清楚。您只是想打印,还是想要一个返回可以打印的字符串的函数?如果两个字符串组合的字符数超过N,应该怎么办?这两个“字符串”是否已经是字符串,还是需要先将日期时间值转换为字符串? N 是固定的还是可以改变的?以此类推。
  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQ 和How to Ask。
  • @elethan - 好的,谢谢!看起来,是的,你是对的。事实上,我并没有为得到解决方案而努力。我尝试了rjust,并阅读了一些关于format 的信息,但我没有找到一个简单的解决方案。我想我会从这里的某个人那里得到一个快速简单的解决方案。

标签: python string format text-alignment


【解决方案1】:

假设您知道行的宽度,您可以使用'{:n}'.format(string) 将字符串填充到 n 长度的空格。如果字符串长于 n,这不会缩短字符串,因为您声明永远不会出现这种情况。

'===>>> [FINISHED] Building sources: {:35} ({})'.format('bla', 'time')

以类似的方式,您可以通过用零填充来格式化时间:{:02}

hour = 1
minute = 20
second = 30
prefix = '===>>> [FINISHED] Building sources: '
content = 'bla'

time = '({:02}h:{:02}m:{:02}s)'.format(hour, minute, second)
print '{}{:35} {}'.format(prefix, content, time)

打印

'===>>> [FINISHED] Building sources: bla                                 (01h:20m:30s)'

【讨论】:

  • 如果一个时间有 10 个或更多小时怎么办?
  • @LaurensKoppenol 谢谢。所以假设N=80,正如你所说的每一行都有一个固定的文本(我用空格算了49个字符),你的解决方案是将变量字符串限制为31。这对吗?
  • 这是正确的。在格式中,您可以编写 'bla'[0:31] 以防止超过 31 个字符的字符串破坏乐趣: .format(string[0:31], time)
  • @LaurensKoppenol 听起来不错。为了接受答案,我会等着看是否有更通用的方法来做到这一点,例如使用 Python 的format,以及我在问题末尾写的一段代码。
  • 感觉就像我在为你做作业,但请检查更新的答案
【解决方案2】:

只有一种方法,添加正确数量的空格...

>>> for a, b in ('fsad', 'trwe'), ('gregrfgsd', '5435234523554'):
        print a + ' ' * (50 - len(a + b)) + b

fsad                                          trwe
gregrfgsd                            5435234523554

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多