有哪些方法可以将Python数据结构输出到reStructuredText

cie*_*lak 8 python restructuredtext

我有一个Python中的元组列表,我想输出到reStructuredText中的表.

docutils库非常支持将reStructuredText转换为其他格式,但我想直接从内存中的数据结构写入reStructuredText.

Ela*_*eph 7

查看制表包.它可以通过以下方式输出RST格式:

print tabulate(table, headers, tablefmt="rst")
Run Code Online (Sandbox Code Playgroud)


cie*_*lak 6

>> print make_table([['Name', 'Favorite Food', 'Favorite Subject'],
                     ['Joe', 'Hamburgers', 'Cars'],
                     ['Jill', 'Salads', 'American Idol'],
                     ['Sally', 'Tofu', 'Math']])

+------------------+------------------+------------------+
| Name             | Favorite Food    | Favorite Subject |
+==================+==================+==================+
| Joe              | Hamburgers       | Cars             |
+------------------+------------------+------------------+
| Jill             | Salads           | American Idol    |
+------------------+------------------+------------------+
| Sally            | Tofu             | Math             |
+------------------+------------------+------------------+
Run Code Online (Sandbox Code Playgroud)

这是我用于快速和脏的reStructuredText表的代码:

def make_table(grid):
    cell_width = 2 + max(reduce(lambda x,y: x+y, [[len(item) for item in row] for row in grid], []))
    num_cols = len(grid[0])
    rst = table_div(num_cols, cell_width, 0)
    header_flag = 1
    for row in grid:
        rst = rst + '| ' + '| '.join([normalize_cell(x, cell_width-1) for x in row]) + '|\n'
        rst = rst + table_div(num_cols, cell_width, header_flag)
        header_flag = 0
    return rst

def table_div(num_cols, col_width, header_flag):
    if header_flag == 1:
        return num_cols*('+' + (col_width)*'=') + '+\n'
    else:
        return num_cols*('+' + (col_width)*'-') + '+\n'

def normalize_cell(string, length):
    return string + ((length - len(string)) * ' ')
Run Code Online (Sandbox Code Playgroud)


jte*_*ace 5

我不知道有任何库从python数据结构输出RST,但是很容易自己格式化它.这是将一个python元组列表格式化为RST表的示例:

>>> data = [('hey', 'stuff', '3'),
            ('table', 'row', 'something'),
            ('xy', 'z', 'abc')]
>>> numcolumns = len(data[0])
>>> colsizes = [max(len(r[i]) for r in data) for i in range(numcolumns)]
>>> formatter = ' '.join('{:<%d}' % c for c in colsizes)
>>> rowsformatted = [formatter.format(*row) for row in data]
>>> header = formatter.format(*['=' * c for c in colsizes])
>>> output = header + '\n' + '\n'.join(rowsformatted) + '\n' + header
>>> print output
===== ===== =========
hey   stuff 3        
table row   something
xy    z     abc      
===== ===== =========
Run Code Online (Sandbox Code Playgroud)