gpt4 book ai didi

python - 从头 Python 构建包含数据的表

转载 作者:行者123 更新时间:2023-12-03 17:07:15 30 4
gpt4 key购买 nike

我需要用这样的数据构建一个表:

     ┌────────┬───────────┬────────┐
│ ID │ Name │ Age │
├────────┼───────────┼────────┤
│ 1 │ Jonh │ 35 │
├────────┼───────────┼────────┤
│ 2 │ Joseph │ 40 │
└────────┴───────────┴────────┘
我不允许使用任何 Python 库 为了那个原因。必须做 从头开始 .
我发现有一些框画 unicode 字符可以用来绘制表格( https://en.wikipedia.org/wiki/Box-drawing_character )。前任:
print(u'\u250C') -> will print ─
我不知道我应该如何解决这个问题。我应该打印数据然后绘制表格还是应该逐行打印完整的盒装。
任何帮助表示赞赏。
我到目前为止的工作:
length_list = [len(element) for row in data for element in row]
column_width = max(length_list)
for row in data:
print(u'\u250C' + (u'\u2500'*column_width*len(data[0])) + u'\u2510')
row = "".join(element.ljust(column_width + 2) for element in row)
print(row)
print(u'\u2514' + (u'\u2500'*column_width*len(data[0])) + u'\u2518')
给我这个:
┌──────────────────┐
ID Name Age
└──────────────────┘
┌──────────────────┐
1 John 35
└──────────────────┘
┌──────────────────┐
2 Joseph 40
└──────────────────┘

最佳答案

你快到了。您可以将任务分成更小的部分并使用 join()让您的生活更轻松。
我们先定义一些常量字符来提高代码可读性

char_line = u'\u2500'
char_lcorner_top = u'\u250C'
char_rcorner_top = u'\u2510'
char_lside = u'\u251C'
char_rside = u'\u2524'
char_top = u'\u252C'
char_bot = u'\u2534'
char_cross = u'\u253C'
char_lcorner_bot = u'\u2514'
char_rcorner_bot = u'\u2518'
现在让我们编写函数来创建行之间的行:
def top_rule(width, ncols):
return char_lcorner_top + char_top.join([char_line * width for i in range(ncols)]) + char_rcorner_top
解释:
  • char_line * width乘以 -人物 width次。比方说 width = 4 .这将给出四个破折号,如下所示:----
  • [char_line * width for i in range(ncols)]创建一个列表 ncols项目,每个项目是 ---- .
  • char_top.join(...) 连接列表的元素人物
  • 在返回之前,我们添加 之前和在我们刚刚创建的字符串之后。

  • 所以 top_rule(4, 3)"┌────┬────┬────┐"同样,我们可以定义更多的函数:
    def bot_rule(width, ncols):
    return char_lcorner_bot + char_bot.join([char_line * width for i in range(ncols)]) + char_rcorner_bot

    def mid_rule(width, ncols):
    return char_lside + char_cross.join([char_line * width for i in range(ncols)]) + char_rside
    在每一行中,我们有多个要格式化的单元格。让我们编写一个函数来单独格式化每一行。
    def fmt_row(row, width, loffset):
    return "|" + "|".join([cell.ljust(width - loffset).rjust(width) for cell in row]) + "|"
    对于行中的每个单元格,我们将单元格文本左对齐到 (width - loffset) 的长度并将其右对齐为 width .然后,加入管道( | )并在前后添加管道
    现在我们需要做的就是调用我们创建的函数。记住我们只需要打印一个 mid_rule在除最后一行之外的所有行之后。在最后一行之后,我们需要打印一个 bot_rule .
    num_cols = len(data[0])
    length_list = [len(element) for row in data for element in row]
    column_width = max(length_list) + 2

    print(top_rule(column_width, num_cols))
    for row in data[:-1]:
    print(fmt_row(row, column_width, 1))
    print(mid_rule(column_width, num_cols))

    print(fmt_row(data[-1], column_width, 1))
    print(bot_rule(column_width, num_cols))
    有了你的数据,你应该得到这个:
    ┌────────┬────────┬────────┐
    | ID | Name | Age |
    ├────────┼────────┼────────┤
    | 1 | John | 35 |
    ├────────┼────────┼────────┤
    | 2 | Joseph | 40 |
    └────────┴────────┴────────┘

    关于python - 从头 Python 构建包含数据的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63020706/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com