设计GUI界面

使用Python常用的PyQt5库,通过不断调试设计最终效果如图:

代码如下:

from PyQt5 import QtCore, QtGui, QtWidgets import pymysql class Ui_Dialog(QtWidgets.QDialog): def __init__(self): super(Ui_Dialog,self).__init__() self.dict = {} self.text_path = 'passage.txt' # def setupUi(self, Dialog): self.setObjectName("Dialog") self.resize(682, 394) self.setSizeGripEnabled(False) self.setModal(False) self.textBrowser = QtWidgets.QTextBrowser(self) self.textBrowser.setGeometry(QtCore.QRect(10, 70, 231, 301)) self.textBrowser.setObjectName("textBrowser") self.label = QtWidgets.QLabel(self) self.label.setGeometry(QtCore.QRect(260, 10, 161, 41)) font = QtGui.QFont() font.setFamily("Arial") font.setPointSize(16) self.label.setFont(font) self.label.setObjectName("label") self.readPassage = QtWidgets.QPushButton(self) self.readPassage.setGeometry(QtCore.QRect(290, 70, 93, 28)) self.readPassage.setObjectName("readPassage") self.textBrowser_2 = QtWidgets.QTextBrowser(self) self.textBrowser_2.setGeometry(QtCore.QRect(430, 70, 241, 301)) self.textBrowser_2.setObjectName("textBrowser_2") self.analyze = QtWidgets.QPushButton(self) self.analyze.setGeometry(QtCore.QRect(290, 120, 93, 28)) self.analyze.setObjectName("analyze") self.save = QtWidgets.QPushButton(self) self.save.setGeometry(QtCore.QRect(290, 170, 93, 28)) self.save.setObjectName("save") self.choose = QtWidgets.QPushButton(self) self.choose.setGeometry(QtCore.QRect(290, 230, 93, 28)) self.choose.setObjectName("choose") self.retranslateUi(self) QtCore.QMetaObject.connectSlotsByName(self) self.readPassage.clicked.connect(self.read_passage) self.analyze.clicked.connect(self.analyse_passage) self.save.clicked.connect(self.db_handle) self.choose.clicked.connect(self.open_file) 

读取文件

<stron>

实现代码如下:</stron>

 def open_file(self): filename, filetype = QtWidgets.QFileDialog.getOpenFileName(self, "选取文件", "C:/", "All Files (*);;Text Files (*.txt)" ) print(filename) self.text_path = filename with open(self.text_path) as f: self.passage = f.read() self.textBrowser.clear() self.textBrowser.insertPlainText(self.passage) def read_passage(self): with open(self.text_path) as f: self.passage = f.read() self.textBrowser.clear() self.textBrowser.insertPlainText(self.passage) 

分析文件

通过split()方法对存放文章的passage字符串进行分割提取出所有单词并存放至words列表中,新建一个字典dict,字典中key为单词,values为单词出现次数,遍历words列表,如果字典中没有这个单词则添加至字典dict中,若已有则使之单词所对应的value值+1。这样遍历一遍之后,dict字典里存放了所有单词与其出现次数。将结果显示到右侧文本框。实现效果如下:

实现代码如下:

 def analyse_passage(self): with open(self.text_path) as f: words = list(f.read()[:-1].split(' ')) self.dict = {} for word in words: if word not in self.dict.keys(): self.dict[word] = 1 else: self.dict[word] += 1 self.textBrowser_2.clear() for key in self.dict.keys(): self.textBrowser_2.insertPlainText(key+": 出现%d次\n"%self.dict[key]) 

保存结果至数据库
实现效果如图:


利用pymysql包连接至mysql数据库,执行下面的SQL语句建立数据库以及表:

CREATE DATABASE `words` CREATE TABLE `words`.`Untitled` ( `word` varchar(255) NOT NULL, `number` int(0) NOT NULL, PRIMARY KEY (`word`) ); 

在Python中连接数据库并且执行insert语句:

 def db_handle(self): db = pymysql.Connect(host='localhost', port=3306, user='root', passwd='wss10000', db='words', charset='utf8') cursor = db.cursor() for word in self.dict.keys(): cursor.execute("INSERT INTO word(word, num) VALUES('%s', '%s')" % (word, str(self.dict[word]))) db.commit() QtWidgets.QMessageBox.about(self, "提示", "保存至数据库成功") db.close()