用python 统计showdoc文章
略过....
1、最近大佬让测试团队自行选择学习的内容,有伙伴选择了python。好了,不光要学,而且要有结果,出了几个任务。
2、好记性不如烂笔头。平时内部都有用showdoc写文章的,写内容的记录。那其中任务之一就是来统计一下showdoc的内容。
任务内容大概如下:
1、统计并打印出每个项目、每个目录、每个用户等维度的文章数
2、导出文档列表到excel中,导出属性:项目名、目录名、文章名、作者
3、根据showdoc生成学习登记表
前提:
showdoc的数据库是sqlite,那先把它从远程先下载到本地:
scp root@192.168.X.XX:/data/showdoc_data/html/Sqlite/showdoc.db.php /home/hww/Downloads
1、统计并打印出每个项目、每个目录、每个用户等维度的文章数
import sqlite3 con = sqlite3.connect('/home/hww/showdoc.db.php') cursor = con.cursor() def project_num(): sql ="SELECT i.item_name '项目',COUNT(*) as '文章数' FROM item i,page p WHERE i.item_id =p.item_id and i.username='showdoc' GROUP BY i.item_name"; res = cursor.execute(sql) print("项目 文章数") for row in res: print(row) def yiji_num(): sql = "SELECT c.item_id '项目id',i.item_name '项目',c.cat_id as '分类id', c.cat_name '一级分类',COUNT(p.cat_id) '文章数' FROM catalog c,item i,page p WHERE i.item_id=p.item_id AND c.cat_id =p.cat_id AND i.username='showdoc' GROUP BY p.cat_id;"; res = cursor.execute(sql) print("项目id"+"*"*8 +"项目名称"+"*"*8+"分类id"+"*"*8 +"一级分类" +"*"*8 +"文章数") for row in res: print(row) def user_write_num(): sql=''' SELECT p.author_username '用户',COUNT(p.page_title) '编写的文章数' FROM page p,user u, item i WHERE p.item_id = i.item_id AND (p.addtime - i.addtime > 1 or p.addtime < i.addtime) AND p.author_uid = u.uid AND p.is_del=0 GROUP BY p.author_username;''' res = cursor.execute(sql) print("用户名称"+"*"*8 +"写的文章数") for row in res: print(row) #调试 project_num() yiji_num() user_write_num()
2、导出文档列表到excel中,导出属性:项目名、目录名、文章名、作者
import sqlite3 import pandas as pd con = sqlite3.connect('/home/hww/showdoc.db.php') cursor = con.cursor() sql =''' SELECT i.item_name '项目名',c.cat_name '目录名',p.page_title '文章名',p.author_username '作者' FROM page p LEFT JOIN item i ON p.item_id = i.item_id LEFT JOIN catalog c ON p.cat_id = c.cat_id WHERE p.item_id = i.item_id AND ( p.addtime - i.addtime > 1 OR p.addtime < i.addtime ) AND p.is_del = 0; ''' res = cursor.execute(sql).fetchall() df = pd.DataFrame(res,columns=['项目名','目录名','文章名','作者']) print(df) df.to_csv('/home/hww/test.csv',index=False) cursor.close()
3、根据showdoc生成学习登记表
登记表的字段如下:
import sqlite3 from datetime import datetime import pandas as pd #连接数据库 con = sqlite3.connect('/home/hww/showdoc.db.php') #创建游标对象 cursor = con.cursor() #查询出2021年测试目录下的所有文档名,添加时间 sql ='SELECT page_title,addtime FROM page WHERE item_id=75 AND addtime BETWEEN 1609432356 AND 1640966376;' content = cursor.execute(sql).fetchall() #print(content) #循环输出结果 course = [] learn_data =[] for cont in content: conn = cont[0] #拿到标题 course.append(conn) #标题添加到数组里面 add_time = cont[1] #拿到时间 datetime= datetime.fromtimestamp(add_time) #时间戳转为datetime格式 #datetime_str =datetime.strftime("%Y-%m-%d %H:%M:%S") #时间格式转为日期字符串 datetime_str =datetime.strftime("%Y-%m-%d ") #时间格式转为日期字符串,因为我只需要判断日期,所以只拿日期就够了 learn_data.append(datetime_str) # print(conn_time,conn) con.close() #伙伴的姓名,就放在一个数组里面了 names =['fu','jiang','meng','wei','cheng']
#表的创建应用到pandas data = { '序号': range(1, len(course) + 1), '部门': 'XX云', '学习日期': learn_data, '学习时间段': '18:30-20:30', '学习时长(小时)': 2, '学习课程': course } df_info = pd.DataFrame(data) #把数据放到表格里面 result = pd.DataFrame() #创建一个新表,为了存名字 #循环名字 for name in names: df_info['姓名'] = name result =result.append(df_info) #往表中添加数据 print(result) result.to_csv('showdoc_sheet2.csv',index=False) #写到CSV表中