Python pdf转csv

  • 背景
    • 依赖的环境
    • 依赖的主要python包
      • pdfminer

背景

最近有需求需要解析电子行程单(滴滴、美团、高德等)的数据,由于电子行程但都是PDF的文件,为此需要解析PDF,由于PHP对解析pdf方面较弱,所以选用了Python。过程是现将pdf转为csv,然后解析csv文件的数据。

依赖的环境

Python 3.7.6
Java 1.8.0_121(tabula-py 是对 tabula-java 的封装,所以需要依赖 Java)
nignx 由于这边用到flask框架,该框架无法使用80端口,为了防止端口暴露,所以需要使用nginx做转发,该框架和转发后续文章讲解

依赖的主要python包

flask==1.1.1 用到的框架
pdfminer.six==20200124  解析PDF的包

pdfminer

由于后面会单独讲flask,在此主要说一下pdfminer

  1. 安装
    pip install pdfminer.six
  2. 实现
from pdfminer.high_level import extract_text
from pdfminer.pdfparser import PDFSyntaxErrordef _parse(file_path, line_count=0):"""解析滴滴出行的行程单,表头行需要特别清洗"""area = [266, 42.765625, 785.028125, 564.134375]if line_count != 0:area[2] = 3120.003125 + 31.2375 * line_countdfs = tabula.read_pdf(file_path, pages="all", area=area)num = len(dfs)save_data = []save_data.append(dfs[0])if num == 0:logging.error("no table found")elif 1 < num:for i in range(1, num):area = [175, 42.765625, 785.028125, 564.134375]area[2] = 3120.003125 + 31.2375 * line_countdfs = tabula.read_pdf(file_path, pages=i + 1, area=didi_area)save_data.append(dfs[0])# 滴滴的表头行有一些多余的换行符,导致导出的 CSV 破损for i in range(0, num):save_data[i].columns = [name.replace('\r', ' ') for name in save_data[i].columns]return save_data

上面是一个简单的读取文件内容的功能,支持多页读取,
area:控制读取内容的位置,由于第二页的数据位置和第一页不同,所以需要重新读取

然后将数据写入CSV

# data 读取的PDF数据
# output_path csv保存的路径
def _output_csv(data, output_path):"""利用 DataFrame 自身的 API,导出到 CSV 格式"""# 增加 BOM 头,否则不能双击Excel 直接打开CSVwith open(output_path, mode='wb') as output:output.write(BOM_UTF8)with open(output_path, mode='a', newline='') as output:for i in range(0, len(data)):data[i].to_csv(output, index=False)

以上就生成了CSV文件,后面就是通过取CSV文件数据就可以了。

项目地址: pdf2csv.

Python pdf转csv相关推荐

  1. python csv转excel_使用 Python 把 PDF 转为 CSV 和 Excel(一)

    杭州国立公证处-公正摇号 会不定期公布杭州各个楼盘的购房意向登记汇总表和摇号结果,里面公开的数据是很全面的,对于想要分析一波数据搞点事情的人来说,挺有吸引力的. 但当你兴冲冲地去官网下载完数据,一看傻 ...

  2. python中写入csv文件的方法_Python写入CSV文件的方法

    python笔记5-python2写csv文件中文乱码问题 前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode. 当list.tuple.dict里面 ...

  3. Python读取excel/csv表格并通过折线图可视化显示

    Python读取excel/csv表格并通过折线图可视化显示 写作背景 参数 使用figure()函数重新申请一个figure对象 注意,每次调用figure的时候都会重新申请一个figure对象 第 ...

  4. python pandas 读写 csv 文件

    python pandas 读写 csv 文件 具体看官方文档 https://www.pypandas.cn/docs/user_guide/io.html#csv-文本文件 import pand ...

  5. python PDF 转 图片

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

  6. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  7. Python写入到csv文件存在空行的解决方法

    Python写入到csv文件存在空行的解决方法 参考文章: (1)Python写入到csv文件存在空行的解决方法 (2)https://www.cnblogs.com/crooswang/p/5953 ...

  8. python之模块csv之CSV文件的写入(按行写入)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #CSV文件的写入(按行写入)import csv #csv文件,是一种常用的文本格式,用以存储表格数据,很多 ...

  9. python csv读取-python如何读取csv数据

    python读取csv数据的方法:首先利用csv.reader方法来读取csv文件,该方法会返回一个可迭代的对象csv_read,然后我们可以直接从csv_read对象中获取数据. python中读取 ...

最新文章

  1. 因特网的协议集称为TCP/IP协议集
  2. pycharm 报黄(黄字、黄色)警告 Local variable 'xxx' might be referenced before assignment
  3. 无线路由器、AP、胖AP、瘦AP的概念区别
  4. tableau示例超市数据在哪儿_超市运营分析 -- Tableau 实战
  5. Navicat Premium 64 bit 12.1.25
  6. 敏捷中gwt含义_在您的GWT应用程序中添加JSON功能
  7. C++基础::shared_ptr 编程细节(一)
  8. Spark SQL运行架构
  9. Java编程框架——Spring Cloud微服务架构实践经验总结
  10. 生活杂谈-空调的修理
  11. pr用什么显卡比较好_学ps pr ae用什么电脑比较好?有什么配置要求?
  12. 手写原笔迹输入_原笔迹手写软件
  13. 红外hs0038接收测试代码
  14. storm风暴英雄 tempo_19.4版本TempoStorm 风暴英雄天梯环境报告
  15. 如何将caj转换成word?caj转Word工具
  16. PaaS平台设计思想
  17. 我国知识共享数学生态圈的发端历程
  18. jQuery 流星雨特效
  19. ES5对象学习-多个对象的创建
  20. gh-ost和pt-osc性能对比

热门文章

  1. 可以为linux提交代码,大学教授「故意」向 Linux 提交含 Bug 代码
  2. informatica 学习日记整理
  3. Python challenge 全部题解
  4. 数据分析 波士顿房价预测
  5. 用java创建person类_java编程问题创建person类
  6. 抖音用户评论和ID的采集方法
  7. 2021-12-23 迈向程序员的第五十二步
  8. C/C++安全编程条例
  9. 一行代码教你如何学会网络测速
  10. Ubuntu18.04修改iBus输入法快捷键