【问题标题】:formatting print statement based on different end argument values根据不同的结束参数值格式化打印语句
【发布时间】:2021-02-15 17:23:53
【问题描述】:

我正在为 android 上的 termux 终端制作 UI。

下面的这段代码打印了目录的内容。

它工作得很好,但输出不均匀,即列之间的空间不规则。

我见过有人使用格式,但在我的例子中,每次打印的最终参数值都不同。

def display_dir(dir_name):
    direc = os.listdir(dir_name)
    for index, d in enumerate(direc):
    if index % 2 == 0:
        print(f"{index}- {d}", end=" " * 10)
    else:
        print(f"{index}- {d}", end="\n")

但我想要完美对齐的 2 列输出。我尝试了很多东西。有没有捷径可以做到这一点?

我实际上有一个解决方案,我检查最长的字符串并为剩余的字符串添加空格,但这不是最佳的。

【问题讨论】:

  • 这能回答你的问题吗? How to print a list more nicely?
  • 这能回答你的问题吗? Create nice column output in python
  • @Tomerikoo 它从列表中删除了一些元素,我也需要索引但我找不到。
  • @AnsFourtyTwo 您建议的帖子适用于嵌套列表。我的是一个单一的列表。但我可能会尝试切片......谢谢顺便说一句。
  • 当然,这只是为了得到这个想法。

标签: python


【解决方案1】:

您可能正在寻找这样的东西:

def display_dir(dir_name):
    direc = os.listdir(dir_name)
    max_len = len(max(direc, key=len))

    for index, d in enumerate(direc):
        if index % 2 == 0:
            print("{:2}- {:<{}}".format(index, d, max_len), end=" ")
        else:
            print("{:2}- {:<{}}".format(index, d, max_len), end="\n")

甚至更进一步:

def display_dir(dir_name):
    direc = os.listdir(dir_name)
    
    max_len_even = len(max(direc[::2], key=len))
    max_len_odd = len(max(direc[1::2], key=len))
    index_pad_len = len(str(len(direc)))

    for index, d in enumerate(direc):
        if index % 2 == 0:
            print("{:{}}- {:<{}}".format(index, index_pad_len, d, max_len_even), end=" ")
        else:
            print("{:{}}- {:<{}}".format(index, index_pad_len, d, max_len_odd), end="\n")

【讨论】:

  • 我都试过了,但都显示相同的错误:ValueError: Format specifier missing precision.......我很久没用过Python了......我用的是正确的Python吗版本?
  • 我的错!我已经编辑了我的答案,请改用它。
  • max_len 实际上是最长的目录type -&gt; str 而不是它的长度type -&gt; int
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2021-05-03
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
相关资源
最近更新 更多