wxPython in action,比较系统地介绍了wxPython的使用。一直用的是中文翻译的版本,有时想运行里面的demo,复制出来很费劲,所以写了一个自动化的脚本,将文本转为了markdown格式。

读取pdf文件,将每一页转为json文件。

import pdfplumber
import jsonpath = r'wxpython in action.pdf''''字典组成的列表,按照某一个属性归类,也就是返回一个二维数组'''
def groupByKey(arr,key = 'y0',yBalance = 3.19):tempValue = arr[0][key]tempIndex = 0results = []while(True):tempArr = []flag = Falsefor i,j in enumerate(arr[tempIndex:]):# 注意char的y0属性表示每一个字符距离页面底部的距离,同一行文本可能有一个偏移值,所以需要加上这个范围# 否则同一行文本会被割裂成多行if float(j[key]) >= float(tempValue) - yBalance and float(j[key]) <= float(tempValue) + yBalance:tempArr.append(j)else:tempValue = j[key]tempIndex += iflag = Truebreakresults.append(tempArr)if not flag:breakreturn results'''通过检测字符的字体来判断是否是代码文本,也就是pdf中那个蓝色的斜体字体'''
def checkIsCode(arr):for i in arr:# 要注意空格的字体和文本的字体还不一样if i['fontname'] == 'JJDCVA+Times-BoldItalic' or i['fontname'] == 'DCQJKI+Times-BoldItalic':return Truereturn False'''处理单页pdf'''
def handleSinglePage(page,index):chars = page.chars# 通过char对象的y0属性转为二维数组results = groupByKey(chars, 'y0')resultList = []for j in results:textTemp = ''for k in j:textTemp += k['text']# 去掉这个特殊字符,转为普通空格textTemp = textTemp.replace('\xa0',' ')resultList.append({'text':textTemp,'isCode':checkIsCode(j)})# 写入json文件json.dump(resultList,open('../jsonFiles/'+str(index)+'.json','w',encoding='utf-8'),ensure_ascii=False,indent=4)with pdfplumber.open(path) as pdf:# 获取所有page对象pages = pdf.pagesfor i,page in enumerate(pages[18:]):handleSinglePage(page,i+18)print('page '+str(i+18)+' completed!')

生成的json文件格式如下
每一个对象表示一行文本,text是文本内容,isCode为true表示是代码文本。

[{"text": "Part1 wxPython入门","isCode": false},{"text": "1. 欢迎来到wxPython","isCode": false},{"text": "下面是一个例子,它创建了一个有一个文本框的窗口用来显示鼠标的位","isCode": false},{"text": "置。","isCode": false},{"text": "#!/bin/env python ","isCode": true},{"text": "import wx ","isCode": true}
]

处理json文件,合成为一个markdown文件

from os.path import join
import json'''json文件根目录'''
basePath = r'../jsonFiles''''arr 字典数组 key 需要分组的属性'''
def groupByKey(arr,key):tempValue = arr[0][key]tempIndex = 0results = []while(True):tempArr = []flag = Falsefor i,j in enumerate(arr[tempIndex:]):if j[key] == tempValue:tempArr.append(j)else:tempValue = j[key]tempIndex += iflag = Truebreakresults.append(tempArr)if not flag:breakreturn results'''生成md字符串'''
def generateMdText(content):data= json.loads(content)results = groupByKey(data,'isCode')resultText = ''for i in results:if i[0]['isCode'] == True:text= joinCode(i)resultText += textelse:text = joinText(i)resultText += text# 每一页结束插入md分隔符resultText += '\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n'return resultText'''拼接普通文本'''
def joinText(arr):temp = ''for i in arr:temp += i['text']+'\n'return temp'''拼接代码文本'''
def joinCode(arr):# 拼接python md代码块开头result = '```python\n'temp = joinText(arr)# 替换掉文本中不符合python规范的单引号和双引号'''result += temp.replace('”','\"').replace('“','\"').replace('’','\'')# 拼接python md代码块结尾result += '```\n';return result# 页码范围18-565
for i in range(18,565):p = join(basePath,str(i)+'.json')with open(p,'r',encoding='utf-8') as f:# 读取对应的json文件content = f.read()# 生成md字符串mdText= generateMdText(content)with open('../md/wxpython in action.md', 'a', encoding='utf-8') as f2:f2.write(mdText)

最终生成的mardown文件

python pdf转markdown相关推荐

  1. Markdown转PDF→利用 Markdown 制作电子书|非常简单

    Markdown转PDF→利用 Markdown 制作电子书 前言 遇到什么问题就解决什么问题,什么不会就学什么. 是这样的,因为最近在看数据分析的书籍<利用Python进行数据分析 原书第2版 ...

  2. python PDF 转 图片

    python PDF 转 图片 fitz库 代码 import fitz import time import re import os def pdf2image(pdf_path): '''# 从 ...

  3. 九十八、轻松搞定Python中的Markdown系列

    @Author:Runsen @Date:2020/7/15 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  4. python pdf库_3个Python PDF库,提取信息、转换格式、分割剪裁有它就够了!

    Python无处不在,似乎支持从主要网站到桌面实用程序到企业软件的所有功能.Python已经被用来编写流行的软件项目,如dnf/yum.OpenStack.OpenShot.Blender.Calib ...

  5. 怎样用Python提取信息呢?分享这3个Python PDF库

    很多时候我们都会用Python去取数据文件,这些文件中很多都是PDF格式,有些PDF文件解析的时候只能解析一部分内容出来,大段的文字没有解析出来,那怎么样才能用Python提取这些信息呢? 下面小千就 ...

  6. Python 之 【markdown 模块的学习】

    摘要: markdown工具,可以将txt转化成html格式.这一类工具的作用是将按一定格式写成的可读性强的文本文件转化为结构化的标准xhtml或html.Linux 下面也有markdown: zh ...

  7. Python PDF文件转Word格式

    1.免费在线转换网站 PDF转换器,限制50页: http://pdfdo.com/pdf-to-word.aspx 迅捷PDF转换器,限制2M: http://app.xunjiepdf.com/p ...

  8. python pdf 加水印_Python中通过PyPDF2实现PDF添加水印

    场景 PyPDF 2是一个纯python PDF库,能够分割.合并.裁剪和转换PDF文件的页面.它还可以向PDF文件中添加自定义数据.查看选项和密码.它可以从PDF检索文本和元数据,还可以将整个文件合 ...

  9. python pdf书籍领取

    我的博客地址:http://www.chenxujiang.club 我的微信公众号 关注我的微信公众号: 回复关键词python pdf,即可领取书籍.

最新文章

  1. mysql二进制日志文件差不多_mysql数据同步-基于二进制日志文件和position复制点的方式...
  2. CentOS7安装RabbitMQ集群
  3. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] A A Problem about Polyline(数学)
  4. java 计算器类图_多态计算器(封装、继承、多态、简单工厂)
  5. linux编译安装wine,Ubuntu 13.10 编译安装Wine 1.7
  6. PHP Mysql:时间函数
  7. 带有分页的列表的跳转后,返回时怎么实现保留分页的页数等信息
  8. 【生信技能树】【miRNA】学习笔记(一)
  9. 哈啰单车JAVA面经
  10. VM虚拟机下如何和Windows主机共享文件夹
  11. STM32---定时器的ETR功能
  12. “探月计划”来袭,美国米德天文望远镜助孩子观月赏月
  13. SISD、MIMD、SIMD、MISD计算机的体系结构的Flynn分类法
  14. 更新xcode至12.3,编译报错Building for iOS, but the linked and embedded framework ‘xxx.framework’ was buil...
  15. js 批量坐标转换经纬度_如何批量转换为百度经纬度
  16. es6 arry fill
  17. hive 已知日期计算是周几
  18. 【深度学习】各种卷积的理解笔记(2D,3D,1x1,可分离卷积)
  19. visual studio 2019怎么能完美运行vs2017 vs2015的代码?
  20. 四川电信天邑TY1208-Z_强制刷机固件

热门文章

  1. Javascript常用的数组方法
  2. 【java笔记】Java中的匿名类和匿名内部类
  3. 好看的动漫html页面,漂亮的页面过渡动画
  4. 怎样将抖音橱窗上小店商品图片批量导出并保存
  5. Comodo杀毒软件爆多个漏洞
  6. 怎样才能成长为一家“未来企业”?
  7. 名悦集团:贷款买车和全款买车选哪个好,这笔账怎么算
  8. 索非亚机器人的采访_它曾说要“摧毁人类”,机器人索菲亚,现在变成什么样子了?...
  9. 外星人M15R2安装Ubuntu18.04
  10. 医院信息系统基本功能规范---病案管理分系统功能规范