python自动生成实验报告

python自动生成实验报告

上篇文章中已经实现了matlab实验图片的自动保存,接下来我们试试自动生成实验报告。

我所生成的是md格式的实验报告,因为个人觉得美观,也能比较方便地借助pandoc转换成其它格式。word格式的实验报告就难处理好多,我不会,不过借助宏处理其实应该也能做到自动生成的效果。

我的构想:

# 主要实现实验图片的自动插入、注释以及代码自动粘贴。
# 框架构想:
#    1.以md文件形式存储实验模板,用[xxx]表示需要替换的内容
#    2.指定文件夹,将文件夹下所有图片替换到[实验结果]中。可以通过相对路径实现。并为每个图片添加图片名。为每个实验的分界处添加标题。
#    3.指定文件名形式,将所有符合形式的代码文件均插入到[实验代码]中。

代码:

import os,sys

def search(path=".", name="",nmflag=0):
    # path表示被搜索的路径
    # name表示要搜索的文件名关键词
    # nmflag表示返回的result是文件名(0)还是完整的文件路径(1)
    result=[]
    for item in os.listdir(path):
        item_path = os.path.join(path, item)
        # if os.path.isdir(item_path):    # 如果是文件夹则迭代进行搜索。
        #    search(item_path, name)
        if os.path.isfile(item_path)==True: # 如果是文件
            print('name:',name)
            if name in item:                # 若关键词在文件名中
                if nmflag == 0:
                    result.append(item)
                else:
                    result.append(item_path)
                print (item + ";",end=' ')
    return result

# 1.读取模板文件
file='F:/test1.md'          # 模板文件
desfile=r'F:\test2.md'       # 准备写的文件
gallery=r'F:\实验2'               # 图片所在文件夹
code=r'F:\'

# 判断文件大小,过大则给予提示并拒绝执行
fileinfo=os.stat(file)
if fileinfo.st_size>=10000000:
    print('文件过大')
    sys.exit(0)

# 由于文件较小,一次性将整个内容读入到content里
with open(file,'r',encoding='utf-8') as f:
    content=f.readlines()
print('[+]文件已成功读取')

# 2.搜索所有符合条件的(图像)文件,并添加到模板文件中
pic=search(gallery,name = 'png')
ind=content.index('[实验结果]\n')
del content[ind]                # 删除被替换文本
for k in range(0,len(pic)):     # 在content中插入图片
    nm=pic[k]
    ii=nm.find('.')
    content.insert(ind,'图片:'+nm[0:ii]+'\n')  # 插入图片描述
    ind+=1
    content.insert(ind,'\n')
    ind+=1
    content.insert(ind,'![]('+pic[k]+')'+'\n')
    ind+=1
    content.insert(ind,'\n')
    ind+=1

# 3.搜索所有符合条件的代码文件,并添加到模板文件中
codelist=search(code,name = 'exp2_',nmflag=1)   # 得到所有代码文件的路径
codename=search(code,name = 'exp2_')    # 获取文件名
codecontent=[]
for l in range(0,len(codelist)):
    with open(codelist[l],'r',encoding='GBK') as f:
        onecode=f.readlines()
    print('插入代码',codename[l])
    codecontent.append('代码'+codename[l]+'\n')
    codecontent.append('\n')
    codecontent.append('```matlab\n')
    codecontent+=onecode
    codecontent+=['\n```\n']
content+=codecontent
with open(desfile,'w+',encoding='utf-8') as df:
    for j in range(0,len(content)):
        df.write(content[j])


小知识点:python中的路径有三种写法

r’F:/test1.md’

‘F://test1.md’

F:\test1.md

生成的实验报告效果(用typora打开md文件)

只能截一小部分,但可以看出有图片、图片注释(没截到)、有标题、有文件名及代码内容,只需再稍微补充些文字,一份实验报告就写好了!写作业速度提升很多!

python自动生成实验报告_第1张图片

只能截一小部分,但可以看出有图片、图片注释(没截到)、有标题、有文件名及代码内容,只需再稍微补充些文字,一份实验报告就写好了!写作业速度提升很多!

你可能感兴趣的:(编程实践,数据结构与算法)