美文网首页
Python 文件保存---如何将结果输入到word中

Python 文件保存---如何将结果输入到word中

作者: 嗯西西 | 来源:发表于2019-10-31 16:34 被阅读0次

    问题:

    我有一个数据结果,本来是以表格形式存储,多张图片,需要在数据生成过程中,保存到同一个文件中,方便后续查看,怎么做?


    解决方法:

    (1)文档格式的选取:

    txt / log:虽然可以存储数据,但图片无法保存

    pdf: 可以同时保存数据和图片,但需要将数据转为图片形式保存(目前我了解的内容)

    doc: 可以同时保存数据和图片,数据可按照自己想要的形式保存,图片也可写入

    首选doc格式,因此,下面主要介绍自己学习到的,如何将数据和图片按照自己想要的格式保存到word中。

    (2)需要存储的数据形式:

      name    acc    recall    auc

      test_A  0.734  0.834  0.843

      test_B  0.765  0.768  0.921

      test_C  0.875  0.829  0.897

    该数据打印出来是看着像表格,其实是dataframe的形式打印。

    需要存储的图片在fig文件夹中。

    (3)开始存储

    1)生成document生成器

    注意:要先引入库 import docx

    如果不存在,记着pip3 install docx 安装一下哈

    # 准备文件,开始存储数据和图片

    document = docx.Document()

    # 给该文档加上标题add_heading,最后的1,表示该标题为1级标题

    # 文档中换行的命令为'\n'

    document.add_heading(u'测试存储数据和图片到word文档中\n\n',1)

    2)保存表格信息

    def save_df_to_doc(document, test_df):

        '''

        将结果按照dataframe的形式存入doc文件

        :param document: 存入的文档类

        :param test_df: 需要保存的df

        :return:

        '''

        # add_paragraph表示添加一个段落

        document.add_paragraph(u'各个指标的平均值表格\n')

        # 添加一个表格--行数和列数,行数多加一行,需要将列名同时保存

        t = document.add_table(test_df.shape[0] + 1, test_df.shape[1])

        # 将每列列名保存到表格中

        for j in range(test_df.shape[-1]):

            t.cell(0, j).text = test_df.columns[j]

        # 将每列数据保存到新建的表格中

        for i in range(test_df.shape[0]):

            for j in range(test_df.shape[-1]):

                # 第一行保存的是列名,所以数据保存时,行数要加1

                t.cell(i + 1, j).text = str(test_df.values[i, j])

    3)遍历文件夹,保存图片

    #将文件夹中的图片,遍历保存到document文件中

    fig_path = os.path.join(CURRENT_DIR, 'fig/')

    fig_list = os.listdir(fig_path)

    for fig in fig_list:

        if '.jpg' in fig or '.png' in fig or '.jpeg' in fig:

            # 将已保存的png文件,保存到word文档中

            document.add_paragraph('\n\n\n' + fig + u'图片显示保存')  # 插入段落

            # add_picture表示在document中加入图片,width表示图片的大小,Inches英寸

            document.add_picture(fig_path + fig, width=Inches(6.5))  # 向文档里添加图片


    4)保存结果


    完整代码如下:

    import os

    import pandas as pd

    import docx

    from docx.shared import Inches

    CURRENT_DIR = os.path.abspath(os.path.dirname(__file__))

    def save_df_to_doc(document, test_df):

        '''

        将结果按照dataframe的形式存入doc文件

        :param document: 存入的文档类

        :param test_df: 需要保存的df

        :return:

        '''

        # add_paragraph表示添加一个段落

        document.add_paragraph(u'各个指标的平均值表格\n')

        # 添加一个表格--行数和列数,行数多加一行,需要将列名同时保存

        t = document.add_table(test_df.shape[0] + 1, test_df.shape[1])

        # 将每列列名保存到表格中

        for j in range(test_df.shape[-1]):

            t.cell(0, j).text = test_df.columns[j]

        # 将每列数据保存到新建的表格中

        for i in range(test_df.shape[0]):

            for j in range(test_df.shape[-1]):

                # 第一行保存的是列名,所以数据保存时,行数要加1

                t.cell(i + 1, j).text = str(test_df.values[i, j])

    if __name__ == '__main__':

        # 生成要存储的数据形式

        example_df = pd.DataFrame([])

        example_df['name'] = ['test_A', 'test_B', 'test_C']

        example_df['acc'] = [0.734, 0.765, 0.875]

        example_df['recall'] = [0.834, 0.768, 0.829]

        example_df['auc'] = [0.843, 0.921, 0.897]

        # 将name列设置为索引列

        # example_df = example_df.set_index('name')

        # 准备文件,开始存储数据和图片

        document = docx.Document()

        # 给该文档加上标题add_heading,最后的1,表示该标题为1级标题

        # 文档中换行的命令为'\n'

        document.add_heading(u'测试存储数据和图片到word文档中\n\n',1)

        # 将df保存到document中

        save_df_to_doc(document, example_df)

        #将文件夹中的图片,遍历保存到document文件中

        fig_path = os.path.join(CURRENT_DIR, 'fig/')

        fig_list = os.listdir(fig_path)

        for fig in fig_list:

            if '.jpg' in fig or '.png' in fig or '.jpeg' in fig:

                # 将已保存的png文件,保存到word文档中

                document.add_paragraph('\n\n\n' + fig + u'图片显示保存')  # 插入段落

                # add_picture表示在document中加入图片,width表示图片的大小,Inches英寸

                document.add_picture(fig_path + fig, width=Inches(6.5))  # 向文档里添加图片

        # document要保存的地址和名字,如果地址不存在,这生成该地址文件夹

        doc_save_path = os.path.join(CURRENT_DIR, 'result/')

        if not os.path.exists(doc_save_path):

            os.system('mkdir -p ' + doc_save_path)

        doc_name = 'test_result.docx'

        # 保存文档

        document.save(doc_save_path + doc_name)  # 保存文档


    相关文章

      网友评论

          本文标题:Python 文件保存---如何将结果输入到word中

          本文链接:https://www.haomeiwen.com/subject/nrutbctx.html