如何利用python docx自动化提取文档中代码段
许多英文编程原版书籍中,并没有提供完整的源码,如果全部人肉实践,面对这样一部部大部头也是很辛苦的事情。
好在我们有了docx模块工具,下面简单说明下如何利用python docx自动化提取英文文档中的代码。
简单概述下这个问题,最近翻出了一本<linux shell scripting cookbook>。希望能实践下里面的一些命令行,手敲当然是没问题的。这也不符合一个程序员的习惯,翻了下python docx的文档。发现了一个途径如下:
1 英文书籍中,source code和warning等都是特殊字体标注的
2 转化英文书籍为docx格式,推荐calibre格式转化工具
3 利用python docx读取docx文件,利用字体类型来判断是否为代码示例
4 打印代码内容。如果书籍为pdf格式,类似步骤,不再实践。
先来看疗效
shine@z210:~/py$ python3 docx-rd.py > shell-cookbook-cmd-log.txt
成功抓取了这些内容,如下
se@x:~/py$ head shell-cookbook-cmd-log.txt
#!/bin/bash #Filename: print
%s
%-5s
echo -e "1\t2\t3" 1 2 3
echo -e "\e[1;31m This is red text \e[0m"
echo -e "\e[1;42m Green Background \e[0m"
cat /proc/$PID/environ
$ pgrep gedit 12501
$ cat /proc/12501/environ GDM_KEYBOARD_LAYOUT=usGNOME_KEYRING_PID=1560USER=slynuxHOME=/home/slynux
$ cat /proc/12501/environ
好了,最后附上简单的代码片段,运行环境python3
se@x:~/py$ cat docx-rd.py
#coding=utf-8
from docx import Document
document = Document(u'lssc.docx')#load the docx file
for parap in document.paragraphs:#Iterate the paragraph
if len(parap.runs) is not 0 and parap.runs[0].font.name == 'Courier New': #Here is an example
print(parap.runs[0].text)#In this docs,Courier New is the source code font style,just print it!
以上,谢谢阅览。