python进阶

如何利用python docx自动化提取文档中代码段

2018-04-08  本文已影响33人  aceblade

许多英文编程原版书籍中,并没有提供完整的源码,如果全部人肉实践,面对这样一部部大部头也是很辛苦的事情。

好在我们有了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!

以上,谢谢阅览。

上一篇下一篇

猜你喜欢

热点阅读