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