【自学笔记】Python 利用pdfplumber批量将PDF转EXCEL
本帖最后由 SuPG 于 2022-8-23 09:20 编辑自学python,用于办公,由于有大量的可编辑型PDF需要转成EXCEL,因此写了下面这一段!
新手写,请多多包涵:lol
import pdfplumber
import os,time
from openpyxl import Workbook
## 第一步
### 提取文件夹中所有文件的路径
def listdir(path,list_name):
for file in os.listdir(path):
file_path = os.path.join(path,file)#获取该文件夹下所有文件的路径
if os.path.isdir(file_path):#判断是否为文件夹,若是则继续判断该文件夹内是否还含有文件夹,该循环会将全部文件夹都纳入判断范围
listdir(file_path,list_name)
else:
list_name.append(file_path)#将文件的路径都添加到list中
## 第二步
### 方法1 识别文件夹下全部PDF,识别内容分别保存到多个工作簿中,保存名称为该PDF的名称。(一个PDF文件对应一个工作簿)
def SplitToWorkbook(pdflist_name):
for pdflistname in pdflist_name:
pdf = pdfplumber.open(pdflistname)#打开文件
workbook = Workbook()#启动excel
sheet = workbook.active
for i in range(len(pdf.pages)):#判断页码
firstpagepdf = pdf.pages
table = firstpagepdf.extract_table()#识别表格
try:
for row in table:
sheet.append(row)
except:
pass
if sheet.max_row == 1:
pass
else:
Dirpath = 'A' + str(sheet.max_row + 1)# sheet.max_row的意思是获取最大使用行数
sheet = pdflistname# 添加路径
workbook.save(filename=(pdflistname.split('.') + '.xlsx'))
### 方法2 识别文件夹下全部PDF文件,识别内容拆分保存到同一个工作簿的不同工作表(sheet)内。(将参与识别的PDF文件保存成同一工作簿里面的多个独立工作表)
def SplitToSheet(pdflist_name,dirpath):
workbook = Workbook()
sheet = workbook.active #唤醒表格
for i in range(len(pdflist_name)): #获取文件数,用于后续迭代
pdf = pdfplumber.open(pdflist_name)
if i == 0:
sheet.title = pdflist_name.split('\\')[-1]
for page in range(len(pdf.pages)): #获取PDF总页数
firstpagepdf = pdf.pages
table = firstpagepdf.extract_table()
try:
for row in table:
sheet.append(row)
except:
pass
if sheet.max_row == 1:
workbook.remove(sheet)#删除空表格
else:
Dirpath = 'A' + str(sheet.max_row+ 1) # sheet.max_row的意思是获取最大使用行数
sheet = pdflist_name # 将该文件的地址保存到最后一行
else:
sheet = workbook.create_sheet(title=pdflist_name.split('\\')[-1]) #创建新表
for page in range(len(pdf.pages)):
firstpagepdf = pdf.pages
table = firstpagepdf.extract_table()
try:
for row in table:
sheet.append(row)
except:
pass
if sheet.max_row == 1:
workbook.remove(sheet)#删除空表格
else:
Dirpath = 'A' + str(sheet.max_row + 1)# sheet.max_row的意思是获取最大使用行数
sheet = pdflist_name# 将该文件的地址保存到最后一行
workbook.save(filename=dirpath + '\SplitToSheet.xlsx') #保存地址
### 方法3 识别文件夹下全部PDF文件,识别内容均保存到同一个工作表(sheet)中。(将参与识别的PDF文件保存到同一工作簿及同一个工作表中)
def SplitToOneSheet(pdflist_name, dirpath):
workbook = Workbook()
sheet = workbook.active
arow = 'A' + str(sheet.max_row) # max_row指该文档中已使用的行,从1开始
bcolumn = 1
for pdflistname in pdflist_name:
pdf = pdfplumber.open(pdflistname)
sheet = pdflistname
for i in range(len(pdf.pages)):
firstpagepdf = pdf.pages
table = firstpagepdf.extract_table()
try:
# for row in table:
# sheet.append(row)
for a,row in enumerate(table,start=bcolumn):
for b , value in enumerate(row,start=1):
sheet.cell(row=a,column=b).value = value
except:
pass
arow = 'A' + str(sheet.max_row + 1)
bcolumn = int(sheet.max_row) + 1
workbook.save(filename=dirpath + '\SplitToOneSheet.xlsx') #保存地址
if __name__=='__main__':
dirpath = r'C:\Users\JiaJun\Desktop\新建文件夹' # 需要识别的文件夹地址
list_name = [] # 用于保存文件路径
pdflist_name = [] # 用于保存文件路径
listdir(dirpath, list_name) #添加文件路径
for i in range(len(list_name)):
# if list_name.split('.')[-1] =='pdf' and time.localtime(os.path.getmtime(list_name)) == 2022 and time.localtime(os.path.getmtime(list_name)) == 6:
if list_name[-3:] == 'pdf': # 判断是否是pdf文件,是则会添加到pdflist中
pdflist_name.append(list_name)
print('该文件夹下的文件有:',list_name)
print('需要做PDF文件识别的有:', pdflist_name)
# 下面三个方法可供选择
# SplitToWorkbook(pdflist_name) #(一个PDF文件对应一个工作簿)
# SplitToSheet(pdflist_name,dirpath) #(将参与识别的PDF文件保存成同一工作簿里面的多个独立工作表)
# SplitToOneSheet(pdflist_name,dirpath) #(将参与识别的PDF文件保存到同一工作簿及同一个工作表中)
print('文件识别完毕!')
啊啊啊啊有没有不用Python的 傻瓜工具
页:
[1]