步骤1
遍历当前文件夹获取当前pdf文件
# 这是返回文件的绝对路径写法
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
document_path = PATH('./')
list1 = []
for file in os.listdir(document_path):
if file.endswith(".pdf"):
if file not in list1:
list1.append(file)
步骤2
创建Excel对象,方便以后追加sheet进去
import pdfplumber
# results_name可以用时间戳创建,mode='a'是追加
now_time = time.strftime("%Y%m%d_%H%M%S")
df_first = pd.DataFrame()
results_name = 'results_%s.xlsx' % now_time
df_first.to_excel(results_name)
writer = pd.ExcelWriter(results_name, mode='a', engine='openpyxl')
步骤3
获取要处理的表格数据的起始页与结束页,我这里是在第三页的目录利用正则获取
for i in list1:
pdf = pdfplumber.open(PATH(i))
for page in pdf.pages:
if page.page_number == 3:
content = page.extract_text()
# 利用正则或其他方法获取pdf表格开始页与结束页
start_page = int(re.findall('3.4.*?(\d+)', content)[0])
end_page = int(re.findall('3.5.*?(\d+)', content)[0])
步骤4
获取表格数据,解析数据存入excel
start_page = start_page+4 # +4是因为实际页数比标明页数多4页
end_page = end_page+4
table_range = [m for m in range(start_page,end_page+1)]
# 这里的dataframe是根据自己实际情况创建,list2是表头,比如['a','b','c','d','e','f','g']
df = pd.DataFrame(columns=list2)
# 再次遍历pdf的page
for page in pdf.pages:
df_len = len(df)
if page.page_number in table_range:
# 有可能存在多个表格,起始页取最后一个,结束页取第一个
table = page.extract_tables()[-1]
# table[1],table[2]...就是要保存的数据
for j in table[1:]:
# 有7列数据,这里写死了。可根据实际情况变通
for k in range(0, 7):
# 替换第一个值得第一个换行符为空
if (k == 0) and (j[k] is not None):
df.loc[df_len, df.columns[k]] = j[k].replace('\n', '', 1)
else:
df.loc[df_len, df.columns[k]] = j[k]
df_len = len(df)
步骤5
关闭pdf对象,保存dataframe到sheet中
pdf.close()
writer.save()
# 所有操作结束后还要关闭writer对象
writer.close()