用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表中

 

 

posted @ 2022-06-14 10:57  ranh  阅读(121)  评论(0编辑  收藏  举报