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文件)

只能截一小部分,但可以看出有圖片、圖片註釋(沒截到)、有標題、有文件名及代碼內容,只需再稍微補充些文字,一份實驗報告就寫好了!寫作業速度提升很多!

在這裏插入圖片描述

只能截一小部分,但可以看出有圖片、圖片註釋(沒截到)、有標題、有文件名及代碼內容,只需再稍微補充些文字,一份實驗報告就寫好了!寫作業速度提升很多!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章