python格式化问题,尝试打印但是很短

时间:2016-01-28 21:08:36

标签: python

enter image description here

我的代码执行此操作:

        print(count,"\t",monthlyPayment,"\t",interest,"\t",loanAmount)

如何让它更整洁更清洁我不确定为什么它们不对齐?请指导?希望以表格形式

2 个答案:

答案 0 :(得分:3)

使用format()。例如:

print('{:7d} {:10d} {:15.2f} {:15.2f}'.format(count, monthlyPayment, interest, loanAmount))

这里d代表十进制整数,f代表浮点数。数字是宽度。例如7d使得整数为7位整数:

    3000

15.2f一个浮点数,总宽度为15和2位小数:

         1000.00

示例输出:

print('{:7d} {:10d} {:15.2f} {:15.2f}'.format(1, 300, 416.67, 99915.67))

是:

      1        300          416.67        99915.67

答案 1 :(得分:1)

按制表符格式化在历史上很棘手。只要您的某个字段变得比标签步长,您的整个格式就会中断。在这种情况下,该字段是标题"payment"

您可以计算列宽(以字符为单位)并创建匹配的str.format格式,而不是使用制表符。我假设你有像

这样的数据
data = [(1, 500, 416.67, 99916.67),
        (2, 500, 416.32, 99832.99),
        ...]
header = [("month", "payment", "interest", "balance")]

正在打印:

for line in header + data:
    print("\t".join(line))

相反,您需要额外运行数据。一旦建立列宽,然后一次打印。

colwidths = []
for column in zip(*(header + data)):
    colwidths.append(len(str(max, column, key=lambda s: len(str(s)))) + 1)
    # the `+ 1` in this case being the column margin

formatting = "".join(r"{{:{}}}".format(width for width in colwidths))

for line in header + data:
    print(formatting.format(*line))

或者,您可以让tabulate为您完成工作。这是第三方模块,保存在pypi包管理器here中。用

安装
pip install tabulate

然后使用代码:

import tabulate

data = [(1, 500, 416.67, 99916.67),
        (2, 500, 416.32, 99832.99),
        ...]
header = [("month", "payment", "interest", "balance")]

print(tabulate.tabulate(data, headers=*header))