Advertisement

PDF信息批量提取至Excel

阅读量:

在学院做助管时,某老师布置了任务:将1000+个PDF文件的指定内容整理到一个Excel中。为了防止在逐个打开复制粘贴的过程中猝死,尝试编写代码简化此问题。实现的功能主要是将每个PDF的信息分别提取到Excel中的每一行。

需要的模块比较少。

复制代码
 import os

    
 import pdfplumber #解析pdf文件,尤其带有表格的文件
    
 from openpyxl import Workbook #读写Excel的文件

提取PDF信息的函数。

复制代码
 def parse(pdf):

    
     targets = [] #保存结果,
    
     for page in pdf.pages: 
    
     words = page.extract_words(x_tolerance=5)
    
     for word in words:
    
         targets.append(word['text'])
    
     return targets
    
     #print(targets)

导出至Excel的函数。

复制代码
 def save(targets, out_path, number, sheet_name='targets'):

    
     ws.title = sheet_name
    
     ws._current_row=number
    
     ws.append(targets)
    
     print(ws)
    
     #ws.append(list(targets.values()))
    
     wb.save(out_path)

PDF遍历函数。

复制代码
 def pdfFilesPath(path):

    
     '''
    
     path: 目录文件夹地址
    
     
    
     返回值:列表,pdf文件全路径
    
     '''
    
     filePaths = [] # 存储目录下的所有文件名,含路径
    
     for root,dirs,files in os.walk(path):
    
     for file in files:
    
         filePaths.append(os.path.join(root,file))
    
     return filePaths

主函数。

复制代码
 # 主函数入口

    
 if __name__ == "__main__":
    
     i = 0
    
     path = 'pdf地址'
    
     pdfpath = pdfFilesPath(path)
    
     wb = Workbook()
    
     ws = wb.active
    
     while i < pdf数量:
    
     out_path = 'excel输出地址/文件名.xlsx'
    
     pdf = pdfplumber.open(pdfpath[i])
    
     number = i
    
     targets = parse(pdf)
    
     save(targets, out_path, number)
    
     i += 1
    
     print('运行结束!')

完整代码:

复制代码
 import os

    
 import pdfplumber #解析pdf文件,尤其带有表格的文件
    
 from openpyxl import Workbook #读写Excel的文件
    
  
    
 def parse(pdf):
    
     targets = [] #保存结果,
    
     for page in pdf.pages: 
    
     words = page.extract_words(x_tolerance=5)
    
     for word in words:
    
         targets.append(word['text'])
    
     return targets
    
     #print(targets)
    
  
    
 # 保存
    
 def save(targets, out_path, number, sheet_name='targets'):
    
     wb = Workbook()
    
     ws = wb.active
    
     ws.title = sheet_name
    
     ws._current_row=number
    
     ws.append(targets)
    
     print(ws)
    
     #ws.append(list(targets.values()))
    
     wb.save(out_path)
    
  
    
 def pdfFilesPath(path):
    
     '''
    
     path: 目录文件夹地址
    
     
    
     返回值:列表,pdf文件全路径
    
     '''
    
     filePaths = [] # 存储目录下的所有文件名,含路径
    
     for root,dirs,files in os.walk(path):
    
     for file in files:
    
         filePaths.append(os.path.join(root,file))
    
     return filePaths
    
  
    
 # 主函数入口
    
 if __name__ == "__main__":
    
     i = 0
    
     path = 'pdf地址'
    
     pdfpath = pdfFilesPath(path)
    
     while i < pdf数量:
    
     out_path = 'excel输出地址/文件名.xlsx'
    
     pdf = pdfplumber.open(pdfpath[i])
    
     number = i
    
     targets = parse(pdf)
    
     save(targets, out_path, number)
    
     i += 1
    
     print('运行结束!')

全部评论 (0)

还没有任何评论哟~