from github to this gitea
This commit is contained in:
118
gists/python list to markdown table.md
Normal file
118
gists/python list to markdown table.md
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
gists:
|
||||
- id: 955b166f4a286ed427f667cb21d57bfd
|
||||
url: 'https://gist.github.com/955b166f4a286ed427f667cb21d57bfd'
|
||||
createdAt: '2023-03-08T15:40:39Z'
|
||||
updatedAt: '2023-03-08T15:40:39Z'
|
||||
filename: python list to markdown table.md
|
||||
isPublic: true
|
||||
---
|
||||
|
||||
Here is a function to convert a python list of lists into a markdown formatted table:
|
||||
|
||||
```python
|
||||
def make_markdown_table(array, align: str =None):
|
||||
"""
|
||||
Args:
|
||||
array: The array to make into a table. Mush be a rectangular array
|
||||
(constant width and height).
|
||||
align: The alignment of the cells : 'left', 'center' or 'right'.
|
||||
"""
|
||||
# make sure every elements are strings
|
||||
array = [[str(elt) for elt in line] for line in array]
|
||||
# get the width of each column
|
||||
widths = [max(len(line[i]) for line in array) for i in range(len(array[0]))]
|
||||
# make every width at least 3 colmuns, because the separator needs it
|
||||
widths = [max(w, 3) for w in widths]
|
||||
# center text according to the widths
|
||||
array = [[elt.center(w) for elt, w in zip(line, widths)] for line in array]
|
||||
|
||||
# separate the header and the body
|
||||
array_head, *array_body = array
|
||||
|
||||
header = '| ' + ' | '.join(array_head) + ' |'
|
||||
|
||||
# alignment of the cells
|
||||
align = str(align).lower() # make sure `align` is a lowercase string
|
||||
if align == 'none':
|
||||
# we are just setting the position of the : in the table.
|
||||
# here there are none
|
||||
border_left = '| '
|
||||
border_center = ' | '
|
||||
border_right = ' |'
|
||||
elif align == 'center':
|
||||
border_left = '|:'
|
||||
border_center = ':|:'
|
||||
border_right = ':|'
|
||||
elif align == 'left':
|
||||
border_left = '|:'
|
||||
border_center = ' |:'
|
||||
border_right = ' |'
|
||||
elif align == 'right':
|
||||
border_left = '| '
|
||||
border_center = ':| '
|
||||
border_right = ':|'
|
||||
else:
|
||||
raise ValueError("align must be 'left', 'right' or 'center'.")
|
||||
separator = border_left + border_center.join(['-'*w for w in widths]) + border_right
|
||||
|
||||
# body of the table
|
||||
body = [''] * len(array) # empty string list that we fill after
|
||||
for idx, line in enumerate(array):
|
||||
# for each line, change the body at the correct index
|
||||
body[idx] = '| ' + ' | '.join(line) + ' |'
|
||||
body = '\n'.join(body)
|
||||
|
||||
return header + '\n' + separator + '\n' + body
|
||||
|
||||
|
||||
T = [["hi", "hello", "How do you do ?"],
|
||||
[1, 1, 1],
|
||||
[2, 12345678, 2],
|
||||
['contents', 42, 73]]
|
||||
|
||||
print(make_markdown_table(T, align='left'))
|
||||
|
||||
```
|
||||
|
||||
|
||||
## Examples
|
||||
|
||||
```python
|
||||
>>> T = [["hi", "hello", "How do you do ?"],
|
||||
... [1, 1, 1],
|
||||
... [2, 12345678, 2],
|
||||
... ['contents', 42, 73]]
|
||||
>>> print(make_markdown_table(T))
|
||||
| hi | hello | How do you do ? |
|
||||
| -------- | -------- | --------------- |
|
||||
| hi | hello | How do you do ? |
|
||||
| 1 | 1 | 1 |
|
||||
| 2 | 12345678 | 2 |
|
||||
| contents | 42 | 73 |
|
||||
|
||||
>>> print(make_markdown_table(T, align='left'))
|
||||
| hi | hello | How do you do ? |
|
||||
|:-------- |:-------- |:--------------- |
|
||||
| hi | hello | How do you do ? |
|
||||
| 1 | 1 | 1 |
|
||||
| 2 | 12345678 | 2 |
|
||||
| contents | 42 | 73 |
|
||||
|
||||
>>> print(make_markdown_table(T, align='center'))
|
||||
| hi | hello | How do you do ? |
|
||||
|:--------:|:--------:|:---------------:|
|
||||
| hi | hello | How do you do ? |
|
||||
| 1 | 1 | 1 |
|
||||
| 2 | 12345678 | 2 |
|
||||
| contents | 42 | 73 |
|
||||
|
||||
>>> print(make_markdown_table(T, align='right'))
|
||||
| hi | hello | How do you do ? |
|
||||
| --------:| --------:| ---------------:|
|
||||
| hi | hello | How do you do ? |
|
||||
| 1 | 1 | 1 |
|
||||
| 2 | 12345678 | 2 |
|
||||
| contents | 42 | 73 |
|
||||
|
||||
```
|
Reference in New Issue
Block a user