姓名 | 性别 | 学号 |
---|---|---|
张佳静 | 女 | 0194966 |
import pdfplumber
import os
import re
import fitz
import csv
os.chdir('D:\金融数据\.spyder-py3')
filenames=os.listdir('D:\金融数据\.spyder-py3')
prefix='公开发行证券的公司信息披露内容与格式准则第2号'
pdf=[f for f in filenames if f.startswith(prefix) and f.endswith('.pdf')]
year=[f[-12:-5] for f in pdf]
#提取年份
def getText(pdf):
text=''
doc=fitz.open(pdf)
for page in doc:
text +=page.getText()
doc.close()
return(text)
#提取年报内容
def getSubtext(pdf):
text=getText(pdf)
p1=re.compile('第二章\s*年度报告正文(.*)第三章\s*年度报告摘要',re.DOTALL)
subtext=p1.search(text).group(0)
return(subtext)
#提取年报第二章节
def getTOC(pdf):
text=getText(pdf)
p1=re.compile('第二章\s*年度报告正文(.*)第三章\s*年度报告摘要',re.DOTALL)
subtext=p1.search(text).group(0)
p=re.compile('(?<=\\n)(第\w{1,2}节)\s+(.*)(?=\\n)')
listOftuple=p.findall(subtext)
return(listOftuple)
#获取目录
toc=[getTOC(f) for f in pdf]
for t in toc:
for item in t:
print(item)
print('\n')
def getTOC_Content(pdf):
subtext=getSubtext(pdf)
p=re.compile('(?<=\\n)(第\w{1,2}节)\s+(.*)(?=\\n)')
index=[]
for match in p.finditer(subtext):
s=match.start()
e=match.end()
index.append((s,e))
content=[]
for i in range(len(index)-1):
s=index[i][1]
e=index[i+1][0]
content.append(subtext[s:e])
last_start=index[-1][1]
last_end=subtext.rfind('\n第三章')
content.append(subtext[last_start:last_end])
return((index,content))
#定义函数
list_of_content = [getTOC_Content(f) for f in pdf]
content_list = [c[1] for c in list_of_content]
def export_to_html(pdf,toc,content,year):
f=open('homework3.html',encoding='utf=8')
html=f.read()
f.close()
template='''
<div>
<h3>%s</h3>
<p>%s</p>
</div>
'''
toc_list=[t[0]+' '+t[1] for t in toc[3]]
div=[template % (t,c) for (t,c) in zip(toc_list,content_list[3])]
div=''.join(div)
html=html % div
f = open('年报格式准则_%s.html' % year, 'w',encoding='utf-8')
f.write(html)
f.close()
return()
#定义函数
for i in range(len(pdf)):
export_to_html(pdf[i], toc[i], content_list[i],year[i])