适用于Python的文本表编写器/打印机

发布于 2021-01-29 17:00:49

TL; DR- >
PyPi上是否有一个表格写入模块(我找不到任何一个),该模块将列表作为参数并从这些列表中制成表格。我之所以这样问是因为我看过PyPI,但没有找到与实际打印字符串或将字符串写入文件类似的东西。

想象一下,有很多统计信息,并且必须像这样将它们整齐地写在一个表中,(我一直在尝试教一堂关于不同排序算法之间差异的课程)(此外,请注意该示例这里给出的代码与下面给出的代码输出不匹配,为了说明我想要的而不做大量的代码,我已经做了简单的操作:

#########################
#   LENGTH ||| TIME(s)  #
#########################
#       0  ||| 0.00000  #
#     250  ||| 0.00600  #
#     500  ||| 0.02100  #
#     750  ||| 0.04999  #
#    1000  ||| 0.08699  #
#    1250  ||| 0.13499  #
#    1500  ||| 0.19599  #
#    1750  ||| 0.26900  #
#    2000  ||| 0.35099  #
#########################

理想情况下,我将编写类似这样的内容以将其保存到文件中,如下所示。一组列表,一个列表包含一组值,另一个包含另一组相应的值。

if __name__ == '__main__':
    with open(os.path.join(os.path.dirname(__file__), 'Sort Stats', 'stats_exp.txt'), 'w') as stats:
        stats.write(
            "O-######################==#######################==#######################==######################-O\n")
        stats.writelines(
            "|{0:^23}||{1:^23}||{2:^23}||{3:^23}|\n".format("Bubble Sort", "Insertion Sort", "Merge Sort (R)",
                                                            "Merge Sort (I)"))
        stats.write(
            "|#######################||#######################||#######################||#######################|\n")
        stats.write(
            "|   LENGTH  |  TIME(s)  ||   LENGTH  |  TIME(s)  ||   LENGTH  |  TIME(s)  ||   LENGTH  |  TIME(s)  |\n")
        stats.write(
            "|#######################||#######################||#######################||#######################|\n")
        for times_taken, t1, t2, t3, t4 in zip(total_lengths, sort_times_bubble, sort_times_ins, sort_times_merge_r,
                                               sort_times_merge_i):
            stats.write(
                "|{0:^11}|{1:^11}||{2:^11}|{3:^11}||{4:^11}|{5:^11}||{6:^11}|{7:^11}|\n"
                .format(
                    times_taken, str(t1)[:6],
                    times_taken, str(t2)[:6],
                    times_taken, str(t3)[:6],
                    times_taken, str(t4)[:6],
                )
            )
        stats.write(
            "O-######################==#######################==#######################==######################-O\n")

    print "Data writing complete"

如您所见,它并不完全漂亮,最重要的是它也不容易扩展,因为它几乎可以打印出一些东西。

我要为此创建一个模块并将其上传到PyPI。但是,如果有人已经做了类似的事情,那将是浪费时间,并且我可以简单地分叉他们的存储库,而不必真正地从头开始编写代码。

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    PrettyTable模块是您需要的:

    PrettyTable是一个简单的Python库,旨在使在具有视觉吸引力的ASCII表中快速轻松地表示表格数据。

    >>> import prettytable
    >>> x = prettytable.PrettyTable(["Length", "Time"])
    >>> x.add_row([0, 0.00000])
    >>> x.add_row([250, 0.00600]) 
    >>> x.add_row([500, 0.02100]) 
    >>> x.add_row([750, 0.04999])    
    >>> print x
    +--------+---------+
    | Length |   Time  |
    +--------+---------+
    |   0    |   0.0   |
    |  250   |  0.006  |
    |  500   |  0.021  |
    |  750   | 0.04999 |
    +--------+---------+
    

    或者,texttable

    texttable是一个使用ASCII字符生成格式化文本表的模块。

    >>> import texttable
    >>> x = texttable.Texttable()
    >>> x.add_rows([["Length", "Time"], [0, 0.00000], [250, 0.00600], [500, 0.02100], [750, 0.04999]])
    >>> print x.draw()
    +--------+-------+
    | Length | Time  |
    +========+=======+
    | 0      | 0     |
    +--------+-------+
    | 250    | 0.006 |
    +--------+-------+
    | 500    | 0.021 |
    +--------+-------+
    | 750    | 0.050 |
    +--------+-------+
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看