python處理excel數(shù)據(jù)
這里用python的openpyxl庫來處理excel下面是代碼,寫的很爛,但是up會(huì)保持學(xué)習(xí),一起和小伙伴們進(jìn)步。
import openpyxl
#import jieba
#import jieba.analyse
class Case:? # 這個(gè)類用來存儲(chǔ)用例的
? ? def __init__(self, attrs):
? ? ? ? """
? ? ? ? 初始化用例
? ? ? ? :param attrs:zip類型——>[{key,value},(key1,value1)......]
? ? ? ? """
? ? ? ? for i in attrs:
? ? ? ? ? ? setattr(self, i[0], i[1])
class ReadExcel(object):
? ? def __init__(self, filename, sheetname):
? ? ? ? """
? ? ? ? 定義需要打開的文件及表名
? ? ? ? :param filename:? ?文件名
? ? ? ? :param sheetname:? 表名
? ? ? ? """
? ? ? ? self.wb = openpyxl.load_workbook(filename)
? ? ? ? self.sheet = self.wb[sheetname]
? ? def read_data_obj_new(self, list2):
? ? ? ? # 獲取最大行數(shù)
? ? ? ? max_r1 = self.sheet.max_row
? ? ? ? cases = []
? ? ? ? # 用來存放表頭數(shù)據(jù)
? ? ? ? titles = []
? ? ? ? for row in range(1, max_r1 + 1):
? ? ? ? ? ? if row != 1:
? ? ? ? ? ? ? ? case_data = []
? ? ? ? ? ? ? ? for column in list2:
? ? ? ? ? ? ? ? ? ? info = self.sheet.cell(row, column).value#這里cell讀取第一行、第一列的數(shù)據(jù):ce = sh.cell(row = 1,column = 1)
? ? ? ? ? ? ? ? ? ? # print(info)
? ? ? ? ? ? ? ? ? ? case_data.append(info)
? ? ? ? ? ? ? ? case = list(zip(titles, case_data))
? ? ? ? ? ? ? ? # 新建對(duì)象時(shí),將對(duì)象傳給Case類
? ? ? ? ? ? ? ? case_obj = Case(case)
? ? ? ? ? ? ? ? # print(case_obj.caseid,case_obj.excepted,case_obj.data)
? ? ? ? ? ? ? ? cases.append(case_obj)
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? # 獲取表頭
? ? ? ? ? ? ? ? for column in list2:
? ? ? ? ? ? ? ? ? ? title = self.sheet.cell(row, column).value
? ? ? ? ? ? ? ? ? ? titles.append(title)
? ? ? ? ? ? ? ? if None in titles:
? ? ? ? ? ? ? ? ? ? raise ValueError("傳入的表頭的數(shù)據(jù)有顯示為空")
? ? ? ? return cases
def printans(filename, sheetname):
? ? r = ReadExcel(filename,'shell')
? ? if r==None:
? ? ? ? return 0
? ? res1 = r.read_data_obj_new([1, 2, 3,4,5,6,7,8,9,10])
? ? #l=0
? ? word_list=[]
? ? itmes=[]
? ? #for i in res1:
? ? ? ? #word_list += jieba.cut(i.題干,cut_all=True)
? ? #stopwords = {}.fromkeys(['的', '附近','。', ':', ',',' ','《','》','、',' ','(',')','“','”',';','\n','了',''])
? ? #segs = jieba.cut(word_list, cut_all=False)
? ? #final = ''
? ? #print(word_list)
? ? #seg=[]
? ? #for seg in word_list:
? ? ? ? #seg = seg.encode('gbk')
? ? ? ? #if seg not in stopwords:
? ? ? ? ? ? #itmes += seg
? ? count_dict = {}
? ? #print(itmes)
? ? #print(itmes)
? ? #for item in word_list:
? ? ? ? #if item not in stopwords:
? ? ? ? ? ? #count_dict[item] = count_dict[item] + 1 if item in count_dict else 1
? ? #print(sorted(count_dict.items(), key=lambda x: x[1], reverse=True))
? ? #print(" ".join(seg_list))
? ? #tags = jieba.analyse.extract_tags(seg_list)
? ? #print(",".join(tags))
? ? ? ? #if i.答案==chara:
? ? ? ? ? ? #l+=1
? ? ? ? ? ? #print(i.題干+'A:'+i.A+'B:'+i.B+ 'C:'+i.C+'D:'+i.D+'答案:'+i.答案)
? ? ? ? ? ? #seg_list = jieba.cut(i.題干,cut_all=True)
? ? ? ? ? ? #print("Full Mode:", "/ ".join(seg_list))
? ? #return l
? ? #print(l)
? ? j=0
? ? for i in res1:
? ? ? ? #if i.答案=='B':
? ? ? ? #print(i.題干+'A:'+i.A+'B:'+i.B+ 'C:'+i.C+'D:'+i.D)
? ? ? ? j+=1
? ? ? ? #if i.答案2!=None:
? ? ? ? ? ? #print(str(j)+':'+i.答案2,end='? ?')
? ? ? ? if i.題干==None:
? ? ? ? ? ? return 0
? ? ? ? if i.A==i.B:
? ? ? ? ? ? print('判斷:',end='')
? ? ? ? ? ? print(str(j)+':'+i.題干)
? ? ? ? elif len(str_Nempty(i.答案2)) ==1:
? ? ? ? ? ? print('單選:',end='')
? ? ? ? ? ? print(str(j)+':'+i.題干+'A:'+i.A+'B:'+i.B+ 'C:'+i.C+'D:'+i.D)
? ? ? ? elif len(str_Nempty(i.答案2)) >1 and len(str_Nempty(i.答案2)) <=4:
? ? ? ? ? ? print('多選:',end='')
? ? ? ? ? ? print(str(j)+':'+i.題干+'A:'+i.A+'B:'+i.B+ 'C:'+i.C+'D:'+i.D)
? ? ? ? elif len(str_Nempty(i.答案2)) >4 and i.答案1!=None:
? ? ? ? ? ? print('多選*:',end='')
? ? ? ? ? ? print(str(j)+':'+i.題干+'A:'+i.A+'B:'+i.B+ 'C:'+i.C+'D:'+i.D+'E:'+i.答案1)
def str_Nempty(s):
? ? if s==None:
? ? ? ? pass
? ? else:
? ? ? ? s=s
? ? return s
def printchara():
? ? num=0
? ? for j in range(1,10):
? ? ? ? print('第'+str(j)+'講')
? ? ? ? filename=str(j)+'.xlsx'
? ? ? ? printans(filename,'shell')
? ? ? ? #print(num)
? ??
if __name__ == '__main__':
? ? printchara()