使用python统计博客文章

目前我写博客都是用word写完后,再使用live writer上传到网站上。同时还会将博客保存成pdf。今天突然想到想统计一下目前写的博客文章。最简单的方法就是去博客的各个目录去看一下有多少,然后统计到excel中。但是作为程序员的我们,怎么可能用这么笨的方法,这不,用python来解决。

首先,先用designer设计界面,并连接信号与槽。文章只有pdfword格式,所有只有两个选项。显示部分,用之前博客介绍的tableWidget控件。

clip_image002

将界面的ui文件转换为py文件。在py文件中,先定义槽函数,不然运行会报错。这里,先不实现函数的内容。等后面在实现。

def tongji(self):

    pass

 

def cellclicked(self,row,col):

    pass

 

def excel_gen(self):

    pass

    编写mainpy,这个文件代码就是例化上面实现的界面类。

import ui1

import sys

from PyQt4.QtCore import *

from PyQt4.QtGui import *

 

class Ui(QWidget,ui1.Ui_Form):

    def __init__(self,parent=None):

        super(Ui,self).__init__(parent)

        self.setupUi(self)

 

app = QApplication(sys.argv)

ui = Ui()

ui.show()

app.exec_()

    运行程序,出现以下界面,和在designer中设计的一致。

clip_image004

 

下面对界面中的控件实现功能。

首先是浏览功能。当点击浏览按钮后,会弹出对话框,选择目录,然后程序会自动的搜索目录下的指定格式的博文,并显示在table中。这里,选择目录使用的是easygui模块中的diropenbox函数。这个函数会出现目录选择对话框,返回你选择的目录的绝对路径。

以下是搜寻目录下的指定格式的博文代码seek_file.py

# -*- coding: utf-8 -*-
import sys
from easygui import *  
import os
 
def list_file(directory,leixing):
    file_list = []
    pwd_list = os.listdir(directory)
    for i in pwd_list:
        if '.' not in i: # 如果是目录的话
            try:
                now_pwd = directory + '\\' + i  #得到目录的绝对路径
                l_list= list_file(now_pwd,leixing) #在目录中统计代码行数
                if l_list:
                    file_list.extend(l_list)
            except:
                pass
        else:  #如果不是目录,对文件进行分析
            if leixing in i:
                file_list.append(i)
    return file_list
 
def dict_file(directory,leixing):
    file_dict = {}
    pwd_list = os.listdir(directory)
    for i in pwd_list:
        if '.' not in i: # 如果是目录的话
            try:
                now_pwd = directory + '\\' + i  #得到目录的绝对路径
                temp_dict= dict_file(now_pwd,leixing) #在目录中统计代码行数
                if temp_dict:
                    file_dict.update(temp_dict)
            except:
                pass
        else:  #如果不是目录,对文件进行分析
            if leixing in i:
                file_dict[i] = directory
    return file_dict
            
if __name__ == "__main__":
    directory = diropenbox('','请选择一个目录',default='G:\\博客文章')             
    #file_list = list_file(directory,'.pdf')
    file_dict = dict_file(directory,'.pdf')
    print(file_dict)

程序中实现了两个函数,函数功能都是一样的,从目录下将指定类型的文件给找出来,只不过list_file返回的是找到的文件的列表,而dict_file返回的是字典,文件是键,文件目录是键值。

 

然后是实现tongji的槽函数了。

def tongji(self):

    directory = diropenbox('','请选择一个目录',default='G:\\博客文章')

    if self.radioButton.isChecked():

        leixing = '.pdf'

    else:

        leixing = '.docx'

    #print(leixing)

    self.file_dict = dict_file(directory,leixing)

    self.file_list = list_file(directory,leixing)

    #print(file_list)

    number = len(self.file_list)

    self.lineEdit.setText(directory)

    self.lineEdit_2.setText(str(number))

    self.tableWidget.setRowCount(number)

    for i in range(number):

        item = QtGui.QTableWidgetItem()

        self.tableWidget.setItem(i,0,item)

    for i in range(number):

        item = self.tableWidget.item(i,0)

        item.setText(_translate("Form", self.file_list[i], None))

    self.pushButton_2.setEnabled(True)

    函数实现也比较简单,调用seek_file.py中的两个函数,得到博文的列表和字典。然后将列表中的数据给写到表格中。同时将博文的总数写到博文总数后面的显示框中。运行效果就是以下截图,发现,至今已经写了106篇博文了。

clip_image006

 

当选择表格中的博文时,在下面的博文和目录中就会出现选中博文的信息。这个代码通过cellclicked槽函数实现,当选择表格中的博文时,就会触发该槽函数执行。这部分代码也比较简单,先获取点击单元格的内容,得到博文名,然后再通过字典得到博文路径,显示在界面中。

def cellclicked(self,row,col):

    print(row+1,col+1)

    item = self.tableWidget.item(row,col)

    file_name = item.text()

    try:

        dic = self.file_dict[file_name]

        self.lineEdit_3.setText(file_name)

        self.lineEdit_4.setText(dic)

    except:

        print('error')

    程序运行,选择表格中的单元格,在下面的显示框中显示对应的数据。

clip_image008

最后一部分就是生成excel。生成excel,在新的py文件中写了一个函数来实现:

import openpyxl

 

def excel_generate(list_file,dict_file,leixing):

    wb = openpyxl.workbook.Workbook()

    ws1 = wb.create_sheet(0,title = leixing[1:])

    for i in range(1,len(list_file)+1):

        temp_list = [i,list_file[i1],dict_file[list_file[i1]]]

        ws1.append(temp_list)

    wb.save(leixing[1:]+'.xlsx')

 

if __name__ == '__main__':

    file_list =['hello.pdf','aaa.pdf']

    dict_file = {file_list[0]: 1, file_list[1]:2}

    excel_generate(file_list,dict_file,'.pdf')

    使用的是操作excelopenpyxl模块,输入参数是文件列表和文件字典以及文件的后缀类型。然后在槽函数的excel_gen中调用该函数即可了,文件列表和文件字典在之前已经获取了,直接传递就可以了。代码就很简单了。

def excel_gen(self):

    #print('excel gen')

    excel_generate(self.file_list,self.file_dict,'.pdf')

    运行后,在目录下就会出现一个excel

clip_image010

打开一看,就是统计的博文。

clip_image012

 

以上就是实现了用python统计自己写的博文了。

 

此条目发表在python, 编程语言分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。