【提取文件名中的股票代码和年份】【python】

需求:
把如下图所示的文件名中,股票代码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版权协议,转载请附上原文出处链接和本声明。