📜  目录中的多个pdf到csv python(1)

📅  最后修改于: 2023-12-03 15:40:59.036000             🧑  作者: Mango

从多个PDF文件创建CSV文件

在本文中,我们将介绍如何使用Python从多个PDF文件中提取数据,并将其保存到单个CSV文件中。

准备工作

为了使用Python在多个PDF文件之间提取数据,需要安装以下库:

  1. PyPDF2: 用于从PDF文件中提取数据。
  2. Pandas: 用于创建和操作数据帧。
  3. tqdm: 用于在循环中显示进度条。
  4. os: 用于在操作系统级别访问文件和目录。
!pip install PyPDF2 pandas tqdm
步骤1: 导入库
import os
import pandas as pd
from PyPDF2 import PdfFileReader
from tqdm import tqdm
步骤2: 定义函数

我们将定义一个函数来处理每个PDF文件并返回数据帧。

def process_pdf(filename):
    with open(filename, 'rb') as f:
        pdf = PdfFileReader(f)
        num_pages = pdf.getNumPages()

        data = {'page': [], 'text': []}

        for i in range(num_pages):
            page = pdf.getPage(i)
            text = page.extractText().replace('\n', ' ')
            data['page'].append(i)
            data['text'].append(text)

        df = pd.DataFrame(data)
        df['filename'] = os.path.basename(filename)

        return df

该函数将输入文件名,并使用PyPDF2库读取PDF文件中的文本。它将提取每个页面的文本,并将其放入数据帧中。最后,它将添加列来跟踪文件名,以便稍后将所有数据帧合并到单个CSV文件中。

步骤3: 处理所有pdf文件

我们将定义一个主函数来处理整个目录中的所有PDF文件。

def process_directory(directory):
    files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.pdf')]

    data_frames = []

    for f in tqdm(files):
        data_frame = process_pdf(f)
        data_frames.append(data_frame)

    df = pd.concat(data_frames)

    output_file = os.path.join(directory, 'output.csv')
    df.to_csv(output_file, index=False)

    return df

该函数将输入目录,并列举所有PDF文件。然后,它将使用我们刚刚定义的process_pdf函数从每个PDF文件中提取数据。它将所有返回的数据帧合并为单个数据帧,然后将其写入名为“output.csv”的文件中。最后,它返回最终数据帧。

步骤4: 运行程序

我们将调用过程目录函数,并将目录作为参数传递。程序将处理目录中的所有PDF文件,并将输出保存到一个名为“output.csv”的文件中。并且还会返回整个数据帧。

df = process_directory('pdf_folder')
完整代码
import os
import pandas as pd
from PyPDF2 import PdfFileReader
from tqdm import tqdm

def process_pdf(filename):
    with open(filename, 'rb') as f:
        pdf = PdfFileReader(f)
        num_pages = pdf.getNumPages()

        data = {'page': [], 'text': []}

        for i in range(num_pages):
            page = pdf.getPage(i)
            text = page.extractText().replace('\n', ' ')
            data['page'].append(i)
            data['text'].append(text)

        df = pd.DataFrame(data)
        df['filename'] = os.path.basename(filename)

        return df

def process_directory(directory):
    files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.pdf')]

    data_frames = []

    for f in tqdm(files):
        data_frame = process_pdf(f)
        data_frames.append(data_frame)

    df = pd.concat(data_frames)

    output_file = os.path.join(directory, 'output.csv')
    df.to_csv(output_file, index=False)

    return df

df = process_directory('pdf_folder')
总结

使用Python将多个PDF文件转换为CSV文件是一项有用的任务。我们在本文中学习了如何使用PyPDF2库从PDF文件中提取文本,如何使用Pandas库创建和操作数据帧,如何使用tqdm库在循环中显示进度条,以及如何使用os库在操作系统级别访问文件和路径。我们希望您能在将来的项目中使用这些概念和代码片段。