需求:
把如下图所示的文件名中,股票代码code和年份year提取出来
一个并不是那么准,但也还过的去的提取方法:
1、提取文件名
import glob
csreportlist = glob.glob("C:\\Users\\sz_wh\\Desktop\\【data】\\社会责任报告\\*.pdf")
2、文件名处理
因为分析了文件名的数据,发现有三种很常见的情况:
“2019社会责任报告”
“2019年度社会责任报告”
“2019企业社会责任报告”
这里,先把“企业”删去,就剩下两种情况
# 去除不必要的路径名
csreportlist = [x.split("\\")[-1] for x in csreportlist]
# 去除“企业”
csreportlist = [x.replace("企业","") for x in csreportlist]
3、提取股票代码和年份
用正则表达式提取股票代码
用粗糙的方法提取年份(此处够用,因为也就1w份不到)
import re
codelist = []
yearlist = []
pdfname = []
for csreport in csreportlist:
# 用正则表达式提取股票代码
code = re.findall("[0-9]{6}",csreport)
year = csreport.split("年")[0][-4:]
if year == ".PDF":
year = csreport.split("社会")[0][-4:]
elif year == ".pdf":
year = csreport.split("-")[1][0:4]
if len(code) is 0:
codelist.append(0)
else:
codelist.append(code[0])
yearlist.append(year)
pdfname.append(csreport)
4、将结果输出到excel
havecsr = {
# 这里保留一个pdfname,因为可能出现错误便于查看
"pdfname":pdfname,
"code":codelist,
"year":yearlist
}
import pandas as pd
havecsr = pd.DataFrame(havecsr)
havecsr.to_excel("..\\havecsr.xlsx")
如果文件名是dataframe的一列
举另外一个例子,(这里是年度报告)
文件名本来就在dataframe中,
我们要把其中股票代码(code)和年份(year)提取出来
import pandas as pd
import re
data["code"] = [re.findall("[0-9]{6}",x) for x in data["filename"]]
data["code"] = [x[0] if len(x)!=0 else 0 for x in data["code"]]
data["year"] = [x.split("年年度报告")[0][-4:] for x in data["filename"]]
# 输出结果,index=0就不会有索引列了
data.to_csv("..\\输出结果\\envk_10analysis.csv",index=False)
data.head() 显示结果:
以及,CSR版本(我非常中意列表循环)
data["code"] = [re.findall("[0-9]{6}",x) for x in data["filename"]]
data["code"] = [x[0] if len(x)!=0 else 0 for x in data["code"]]
data["year"] = [x.split("年")[0][-4:] if x[-3:]=="报告1" else (x.split("-")[1][0:4] if (x.split("-")[0][-4:])=="责任报告" else x.split("社会")[0][-4:]) for x in data["filename"]]
(完)
版权声明:本文为tianty1121原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。