适用于Python的文本表编写器/打印机
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。但是,如果有人已经做了类似的事情,那将是浪费时间,并且我可以简单地分叉他们的存储库,而不必真正地从头开始编写代码。
-
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 | +--------+-------+