美文网首页python自学
Python知乎编辑器中快速生成表格

Python知乎编辑器中快速生成表格

作者: Kaspar433 | 来源:发表于2020-03-18 22:04 被阅读0次

Python知乎编辑器中快速生成表格

知乎编辑文本时,插入表格是个比较困难的事情,本文将解决这个问题。

思路:参考@品颜完月 的“知乎编辑文本:插入表格和表格内换行的方法” 一文,将Markdown代码转换为LaTeX代码。

本文将利用pandas 的to_markdown()方法(pandas 1.0版本以上才有)、字符串的replace()方法以及字符串拼接实现Markdown代码转换为LaTeX代码

下面这篇文章写了怎样快速利用Pandas生成Markdown 表格的方法。

https://zhuanlan.zhihu.com/p/114041168

这篇文章介绍了利用LaTeX写公式的方法添加表格。

https://zhuanlan.zhihu.com/p/75947052

先上效果

\begin{array}[b] {|c|c|} \hline & sepal\_length & sepal\_width & petal\_length & petal\_width & species \\ \hline---:&---------------:&--------------:&---------------:&--------------:&:----------\\ \hline 0 & 5.1 & 3.5 & 1.4 & 0.2 & setosa \\ \hline 1 & 4.9 & 3 & 1.4 & 0.2 & setosa \\ \hline 2 & 4.7 & 3.2 & 1.3 & 0.2 & setosa \\ \hline 3 & 4.6 & 3.1 & 1.5 & 0.2 & setosa \\ \hline 4 & 5 & 3.6 & 1.4 & 0.2 & setosa \\ \hline \end{array}\\

观察代码

Markdown 代码(由to_markdown()方法生成)

import pandas as pd
import numpy as np

data = pd.read_csv('iris.csv', header=0)
print(data.head().to_markdown())

代码输出为:

|      | sepal_length | sepal_width | petal_length | petal_width | species |
| ---: | -----------: | ----------: | -----------: | ----------: | :------ |
|    0 |          5.1 |         3.5 |          1.4 |         0.2 | setosa  |
|    1 |          4.9 |           3 |          1.4 |         0.2 | setosa  |
|    2 |          4.7 |         3.2 |          1.3 |         0.2 | setosa  |
|    3 |          4.6 |         3.1 |          1.5 |         0.2 | setosa  |
|    4 |            5 |         3.6 |          1.4 |         0.2 | setosa  |

LaTeX代码

$$
\begin{array}[b] {|c|c|}
\hline    &   sepal\_length &   sepal\_width &   petal\_length &   petal\_width & species   \\
\hline---:&---------------:&--------------:&---------------:&--------------:&:----------\\
\hline  0 &            5.1 &           3.5 &            1.4 &           0.2 & setosa    \\
\hline  1 &            4.9 &           3   &            1.4 &           0.2 & setosa    \\
\hline  2 &            4.7 &           3.2 &            1.3 &           0.2 & setosa    \\
\hline  3 &            4.6 &           3.1 &            1.5 &           0.2 & setosa    \\
\hline  4 &            5   &           3.6 &            1.4 &           0.2 & setosa    \\ \hline
\end{array}\\
$$

观察结果

  1. 数据主体不变;
  2. 首尾添加了字符串;
  3. 换行处比较特别,要特别处理;
  4. 每行数据之间用 & 隔开。

代码实现

首先获取markdown代码

mk = data.head().to_markdown()

看一下代码的数据类型。

type(mk)

out: str

字符串类型,我们可以使用字符串相关操作进行处理。

具体实现

  1. 处理换行部分
    • 将每一行的尾部"|\n|",直接替换成"\\\n\hline"。
print(mk.replace('|\n|','\\\\\n\\hline'))

out:
|    |   sepal_length |   sepal_width |   petal_length |   petal_width | species   \\
\hline---:|---------------:|--------------:|---------------:|--------------:|:----------\\
\hline  0 |            5.1 |           3.5 |            1.4 |           0.2 | setosa    \\
\hline  1 |            4.9 |           3   |            1.4 |           0.2 | setosa    \\
\hline  2 |            4.7 |           3.2 |            1.3 |           0.2 | setosa    \\
\hline  3 |            4.6 |           3.1 |            1.5 |           0.2 | setosa    \\
\hline  4 |            5   |           3.6 |            1.4 |           0.2 | setosa    |

可以看到已经很接近最终结果了。

  1. 替换数据之间的"|"
print(mk.replace('|\n|','\\\\\n\\hline').replace('|','&'))

out:
&    &   sepal_length &   sepal_width &   petal_length &   petal_width & species   \\
\hline---:&---------------:&--------------:&---------------:&--------------:&:----------\\
\hline  0 &            5.1 &           3.5 &            1.4 &           0.2 & setosa    \\
\hline  1 &            4.9 &           3   &            1.4 &           0.2 & setosa    \\
\hline  2 &            4.7 &           3.2 &            1.3 &           0.2 & setosa    \\
\hline  3 &            4.6 &           3.1 &            1.5 &           0.2 & setosa    \\
\hline  4 &            5   &           3.6 &            1.4 &           0.2 & setosa    &
  1. 定义首尾字符串并进行拼接
header = '$$\n\\begin{array}[b] {|c|c|}\n\\hline'
ender = '\\\\ \\hline\n\end{array}\\\\\n$$'

# 注意:要将字符串中的"_" 替换为"\_",否则下划线后面的字符会显示为下标。
print(header + mk.replace('|\n|','\\\\\n\\hline').replace('|','&').replace('_','\\_')[1:-1] + ender)

out:
$$
\begin{array}[b] {|c|c|}
\hline    &   sepal\_length &   sepal\_width &   petal\_length &   petal\_width & species   \\
\hline---:&---------------:&--------------:&---------------:&--------------:&:----------\\
\hline  0 &            5.1 &           3.5 &            1.4 &           0.2 & setosa    \\
\hline  1 &            4.9 &           3   &            1.4 &           0.2 & setosa    \\
\hline  2 &            4.7 &           3.2 &            1.3 &           0.2 & setosa    \\
\hline  3 &            4.6 &           3.1 &            1.5 &           0.2 & setosa    \\
\hline  4 &            5   &           3.6 &            1.4 &           0.2 & setosa    \\ \hline
\end{array}\\
$$
  1. 函数封装
def markdown_to_latex(mkstr):
    header = '$$\n\\begin{array}[b] {|c|c|}\n\\hline'
    ender = '\\\\ \\hline\n\end{array}\\\\\n$$'
    latex = header + mkstr.replace('|\n|','\\\\\n\\hline') \
                          .replace('|','&') \
                          .replace('_','\\_')[1:-1] + ender
    print(latex)

举个栗子试一下。

markdown_to_latex(tips.head().to_markdown())

out:
$$
\begin{array}[b] {|c|c|}
\hline    &   total\_bill &   tip & sex    & smoker   & day   & time   &   size \\
\hline---:&-------------:&------:&:-------&:---------&:------&:-------&-------:\\
\hline  0 &        16.99 &  1.01 & Female & No       & Sun   & Dinner &      2 \\
\hline  1 &        10.34 &  1.66 & Male   & No       & Sun   & Dinner &      3 \\
\hline  2 &        21.01 &  3.5  & Male   & No       & Sun   & Dinner &      3 \\
\hline  3 &        23.68 &  3.31 & Male   & No       & Sun   & Dinner &      2 \\
\hline  4 &        24.59 &  3.61 & Female & No       & Sun   & Dinner &      4 \\ \hline
\end{array}\\
$$

最后直接将代码粘贴复制在公式编辑框里

Image

\begin{array}[b] {|c|c|} \hline & total\_bill & tip & sex & smoker & day & time & size \\ \hline---:&-------------:&------:&:-------&:---------&:------&:-------&-------:\\ \hline 0 & 16.99 & 1.01 & Female & No & Sun & Dinner & 2 \\ \hline 1 & 10.34 & 1.66 & Male & No & Sun & Dinner & 3 \\ \hline 2 & 21.01 & 3.5 & Male & No & Sun & Dinner & 3 \\ \hline 3 & 23.68 & 3.31 & Male & No & Sun & Dinner & 2 \\ \hline 4 & 24.59 & 3.61 & Female & No & Sun & Dinner & 4 \\ \hline \end{array}\\

Tips: 如果你是在知乎编辑器里编辑文档,粘贴复制的时候把首尾的"$$"去掉。我用的是VSCode + Zhihu On VScode 插件编辑,所以直接粘贴复制。

相关文章

  • Python知乎编辑器中快速生成表格

    Python知乎编辑器中快速生成表格 知乎编辑文本时,插入表格是个比较困难的事情,本文将解决这个问题。 思路:参考...

  • python第七天

    一、python中的生成表达式 1. 列表推导式 用途:快速生成一个列表格式 与普通for循环创建列表进行对比: ...

  • 用 Python 生成 HTML 表格

    在 邮件报表 之类的开发任务中,需要生成 HTML 表格。 使用 Python 生成 HTML 表格基本没啥难度,...

  • Python自带编辑器IDLE的使用教程(转载)

    原文:Python自带编辑器IDLE的使用教程 - 知乎 (zhihu.com)[https://zhuanlan...

  • 链接 | 左手用R右手Python系列

    这个知乎系列不错 左手用R右手Python系列之——表格数据抓取之道 看篇幅 python 比 R 的确要简洁好多...

  • 制作表格

    我们都知道很多的内容编辑器(TinyMCE编辑器、fck)都有插入表格功能,快速方便,但是这些表格用到的标签,可以...

  • HTML5标签

    编辑器快速生成骨架在编辑器输入html5或者英文!按tab键会快速生成。 告诉我们使用的是哪一...

  • 生成器 & yield

    参考: 如何更好地理解Python迭代器和生成器? - 赖明星的回答 - 知乎https://www.zhihu....

  • Markdown 快速生成表格

    本人原创,希望大家喜欢一下哈,转载请注明出处在Markdown上写一个表格真是让人头疼的事情,写的不流畅还要担心格...

  • Python 基础切片整理

    知乎问答之 Python 切片 这是一个知乎问答的补充。原问题是python中字符串 s[ : -1]是什么意思?...

网友评论

    本文标题:Python知乎编辑器中快速生成表格

    本文链接:https://www.haomeiwen.com/subject/dfrhyhtx.html