import os
import pandas as pd
filelist = []
import openpyxl
#pandas之能读取xsl,需要读取xslx需要导入openpyxl
list=[]
bad_file =[]
#step_df = pd.DataFrame()
#from openpyxl import load_workbook
#遍历目录下的所有excel文件
for root, dirs, files in os.walk("D:/nlp\gpt2_cpu\datas", topdown=False):
for name in files:
try:
#获取文件绝对地址
str = os.path.join(root, name)
print(str)
#读取excel文件
df = pd.read_excel(str, header=None)
print("read df done")
#获取列数据
major = df[4][2:]
level = df[7][2:]
course = df[9][2:]
must = df[12][2:]
year = df[13][2:]
#行拼接
list_name = [major,level,course,must,year]
#ignore_index = True 清除现有索引并将其重置,默认为False
#.drop_duplicates() 删除重复行
step_df = pd.concat(list_name,axis=1,ignore_index = True).drop_duplicates()
print(step_df[2])
list.append(step_df)
except:
bad_file.append(name)
print(name)
#列(多表)拼接
result_df = pd.concat(list,ignore_index = True)
#result_df.columns = [major,level,course,must,year]
#添加列名
result_df.columns = ['major','level','course','must','year']
'''
正则匹配串前加了r就是为了使得里面的特殊符号不用写反斜杠了。
[ ]具有去特殊符号的作用,也就是说[(]里的(只是平凡的括号
正则匹配串里的()是为了提取整个正则串中符合括号里的正则的内容
'''
#将空格及内部内容转换成空格
#result_df['course'] = result_df['course'].replace(r'(...)','')
# 将前面的大写字母和数字组成的课程码删除
result_df['course'].replace(r'^[A-z]+[0-9]+','',inplace=True,regex=True)
#删除括号及括号内内容,加了?是最小匹配,不加是贪婪匹配
result_df['course'].replace(r'\s[(](.*)[)]?.','',inplace=True,regex=True)
#将后面的课程码 数字去掉 1 2
result_df['course'].replace(r'\s[0-9].*$','',inplace=True,regex=True)
#将后面的课程码 A B及之后的内容去掉
result_df['course'].replace(r'\s[A-Z]\s.*$','',inplace=True,regex=True)
#去掉 :
result_df['course'].replace(r':','',inplace=True,regex=True)
#将'or' 换成空格,然后后面删除
result_df['course'].replace('or','',inplace=True)
#去除‘-’ 及后面的学分
result_df['course'].replace(r'[-].*','',inplace=True,regex=True)
#去除有空值的行
result_df = result_df.dropna()
print(result_df.shape)
print(bad_file)
#保存数据到csv表格
result_df.to_csv("result.csv")