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

问题:

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


解决方法:

(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)  # 保存文档



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容