跳至正文
View Categories

2 min read

    主要内容 #

  1. 分析结果保存为文件

完成效果 #

本节课程是字数统计小程序的第四节,完成本节课程,能实现将分析结果保存在excel文件中。

收获 #

学习完本节内容,我们会掌握如何简单方便地将分析结果保存为excel的xlsx格式文件,便于展示。

1.分析结果保存为文件 #

xlsx文件是Excel支持打开的文件格式,相比于普通的txt文本文件,xlsx是格式化的表格,且使用Excel打开方便。
存为xlsx文件利用的是pandas库,将统计结果列表转换为pandas专属的DataFrame类型即可存为xlsx文件。
表格样式的xlsx文件展示分析结果,格式整齐,内容清晰,便于阅读。
本例中,点击保存按钮,弹出保存文件对话框后,填写文件名为result,关闭对话框之后自动保存为result.xlsx
以下就是字数统计程序的代码:

from PyQt5.QtWidgets import QMainWindow, QWidget, QTextEdit, QLineEdit, QVBoxLayout, QHBoxLayout, QFileDialog, QHeaderView, QApplication, QPushButton, QTableView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
import sys, csv
import pandas as pd

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        button = QPushButton('分析')  # 添加一个按钮
        # 点击按钮,触发clicked信号,连接到槽函数getAnalyse
        button.clicked.connect(self.getAnalyse)
        textEdit = QTextEdit()  # 创建一个多行文本编辑框
        self.layout = QVBoxLayout()  # 创建一个垂直盒布局
        self.layout.addWidget(button)  # 将按钮添加到布局中
        self.layout.addWidget(textEdit)  # 将文本编辑框添加到文本中
        self.setLayout(self.layout)  # 将布局应用到程序窗口
        filename, filetype = QFileDialog.getOpenFileName(self, '打开文件', 'D:\\Python_Tips\\Dashima\\pics', 'Text Files (*.txt)')  # 弹出打开文件对话框
        if filename:  # 如果文件名不为空,即选择了一个文件
            # 则打开并读取名为filename的文件内容,encoding='utf-8 可以兼容中文
            with open(filename, 'r', encoding='utf-8') as data:  # 则打开并读取名为filename的文件内容,encoding='utf-8 可以兼容中文
                self.content = data.read()  # read方法可以读取txt文档的所有内容
        textEdit.setText(self.content)  # 把文档内容显示在文本框中
        self.table = QTableView()  # 创建一个QTableView对象
        self.setGeometry(300, 300, 500, 800)
        self.setWindowTitle('字数统计小程序')
        self.show()

    def getAnalyse(self):  # 槽函数 用来分析统计文本字数
        content2 = set(self.content)  # set函数去除文本内容中的重复文字
        content2 = list(content2)  # 再转化为列表
        self.countList = []  # 用来储存统计结果
        for i in content2:  # 遍历content2的每一个字符
            # ' ' 是空格, '\n' 是换行符, '\u3000'是全角的空格符,三者都不属于我们能看见的字符,无需统计
            if i == ' ' or i == '\n' or i == '\u3000':
                continue  # 直接跳到下一次循环
            m = self.content.count(i)  # count()方法计算字符i在self.content中出现的次数
            self.countList.append((m, i))  # 将出现的次数和对应文字组成元组,并添加到统计列表countList中
        self.countList.sort(reverse=True)  # 将统计列表,按照出现的次数降序排列
        self.numItem = len(self.countList)  # 获取统计列表的长度
        self.model = QStandardItemModel(self.numItem, 2)  # 创建一个模型实例
        self.model.setHorizontalHeaderLabels(['出现次数', '文本'])  # 设置表头的名称
        for row in range(self.numItem):  # 循环一次给模型的每一个位置赋值
            for column in range(2):
                # 获取数据,column=0时是文字出现次数,column=1时是该文字
                item = self.countList[row][column]
                # 给模型的第row行,第column列添加数据
                self.model.setItem(row, column, QStandardItem(str(item)))
        self.table.setModel(self.model)  # 将模型应用到tableview上去
        # 让表格的所有列自动拉伸,充满界面
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.layout.addWidget(self.table)  # 将tableview加到布局中
        self.button2 = QPushButton('保存')  # 创建一个按钮
        self.layout.addWidget(self.button2)  # 将按钮2添加到布局中
        # 点击按钮2,出发clicked信号,连接到槽函数saveResult
        self.button2.clicked.connect(self.saveResult)

    def saveResult(self):  # 槽函数,用来将分析结果存为新文件
        # 参数"XLSX (*.xlsx *.XLSX)" 用来指定保存为xlsx格式
        filename2, filetype2 = QFileDialog.getSaveFileName(self, '保存文件', 'D:\\Python_Tips\\Dashima\\pics',
                                                            "XLSX (*.xlsx *.XLSX)")
        if filename2:  # 如果文件名不为空,即用户输入了保存的新文件名
            result = pd.DataFrame(self.countList)  # 将元组列表转换为Pandas的DataFrame
            # header=False, index=False 指定保存文件中行、列都不要自动生成的表头
            result.to_excel(filename2, header=False, index=False)  # to_excel函数将DataFrame存为xlsx文件

app = QApplication(sys.argv)  # 创建应用程序
ex = Example()  # 创建窗口对象
sys.exit(app.exec_())  # 设置关闭窗口后结束进程

拓展练习:尝试更改保存按钮在布局中的位置。

小结 #

  • 学习了如何创建保存文件对话框。
  • 学习了如何保存excel文件。
  • 习题 #

    1. 习题1:尝试自定义一个txt文件,分析之后保存文件。