版权声明:转载注明出处 https://blog.csdn.net/J0Han/article/details/82801988
设计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)
读取文件
点击打开文件,选择要读取的文件,读取txt文件,将文件中的文章保存至字符串passage中。将其显示在软件左侧的文本框中,实现效果如图:
实现代码如下:
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()