Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
weixin_42385928 2024-08-01 18:20 采纳率: 80%
浏览 53
已结题

python批量提取发票的信息

1.以滴滴开具的增值税发票为例,需要批量提取的信息包括:PDF文件名、PDF内容:发票号码、开票日期、购买方名称、购买方纳税人识别号、“货物或应税劳务、服务名称”、数量、单价、金额、税率、税额、价税合计小写金额、销售方名称、销售方纳税人识别号。
2.需要输出为excel文件
3.酬金80

  • 写回答

21条回答 默认 最新

  • 然然超绝肌肉线条 2024-08-02 23:43
    关注

    以下是完整代码

    import os
    import pandas as pd
    from pdfminer.high_level import extract_text
    from pdfminer.pdfparser import PDFParser
    from pdfminer.pdfdocument import PDFDocument
    from pdfminer.pdfpage import PDFPage
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.converter import TextConverter
    from pdfminer.layout import LAParams
    import io
    
    def extract_information_from_pdf(pdf_path):
        # 提取 PDF 文本内容
        text = extract_text(pdf_path)
    
        # 解析发票信息
        invoice_info = {}
        lines = text.split('\n')
        for line in lines:
            if '发票号码' in line:
                invoice_info['发票号码'] = line.split(':')[1].strip()
            elif '开票日期' in line:
                invoice_info['开票日期'] = line.split(':')[1].strip()
            elif '购买方名称' in line:
                invoice_info['购买方名称'] = line.split(':')[1].strip()
            elif '购买方纳税人识别号' in line:
                invoice_info['购买方纳税人识别号'] = line.split(':')[1].strip()
            elif '货物或应税劳务、服务名称' in line:
                invoice_info['货物或应税劳务、服务名称'] = line.split(':')[1].strip()
            elif '数量' in line:
                invoice_info['数量'] = line.split(':')[1].strip()
            elif '单价' in line:
                invoice_info['单价'] = line.split(':')[1].strip()
            elif '金额' in line:
                invoice_info['金额'] = line.split(':')[1].strip()
            elif '税率' in line:
                invoice_info['税率'] = line.split(':')[1].strip()
            elif '税额' in line:
                invoice_info['税额'] = line.split(':')[1].strip()
            elif '价税合计小写金额' in line:
                invoice_info['价税合计小写金额'] = line.split(':')[1].strip()
            elif '销售方名称' in line:
                invoice_info['销售方名称'] = line.split(':')[1].strip()
            elif '销售方纳税人识别号' in line:
                invoice_info['销售方纳税人识别号'] = line.split(':')[1].strip()
    
        return invoice_info
    
    def process_pdf_files(pdf_directory, output_excel):
        # 存储发票信息的列表
        invoices = []
    
        # 遍历 PDF 目录中的所有文件
        for filename in os.listdir(pdf_directory):
            if filename.endswith('.pdf'):
                pdf_path = os.path.join(pdf_directory, filename)
    
                # 提取发票信息
                invoice_info = extract_information_from_pdf(pdf_path)
    
                # 添加 PDF 文件名
                invoice_info['PDF 文件名'] = filename
    
                invoices.append(invoice_info)
    
        # 创建 DataFrame
        df = pd.DataFrame(invoices)
    
        # 保存为 Excel 文件
        df.to_excel(output_excel, index=False)
    
    # 指定 PDF 目录和输出 Excel 文件路径
    pdf_directory = 'your_pdf_directory'
    output_excel = 'output.xlsx'
    
    # 处理 PDF 文件并生成 Excel
    process_pdf_files(pdf_directory, output_excel)
    
    #运行时记得将  'your_pdf_directory'  替换为实际的 PDF 文件目录路径。运行代码后,它将提取所有 PDF 文件中的发票信息,并将其保存到  output.xlsx  文件中。
    

    在运行上述代码之前,你需要确保安装了以下库:
    1. pandas :用于数据处理和创建 Excel 文件。
    2. pdfminer :用于提取 PDF 文件中的文本内容。

    可使用命令通过pip安装

    
    pip install pandas pdfminer
    

    当然你也可以选择你熟悉的方法安装

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(20条)

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日
  • 修改了问题 8月3日
  • 赞助了问题酬金15元 8月3日
  • 展开全部

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,