知識(shí)基礎(chǔ)
- Git基礎(chǔ)知識(shí)
- 代碼可參照Example_3
學(xué)習(xí)目標(biāo)
- 用Git進(jìn)行自動(dòng)化腳本的版本管理
- 用Git保證團(tuán)隊(duì)報(bào)告自動(dòng)化腳本的版本同步
1. 文檔結(jié)構(gòu)調(diào)整
在多人協(xié)作時(shí)昙啄,我們要盡保持模板的同步渴语,同時(shí)每個(gè)人對(duì)模板的完善都能集合在一起缰贝,而具體工作的內(nèi)容不應(yīng)該產(chǎn)生干擾习柠。所以對(duì)于變動(dòng)頻繁的文件,我們可以集合起來(lái)然后進(jìn)行同步時(shí)忽略處理巧鸭。
對(duì)于第8章的文檔結(jié)構(gòu)所刀,會(huì)常發(fā)生變動(dòng)的有:
-
report 自動(dòng)化報(bào)告的工作目錄
- main.ipynb 文件的主執(zhí)行和調(diào)試文件撰洗,每次執(zhí)行都會(huì)變化
-
data
- dynamic_data.csv
- static_data.csv
- image 存放生成的圖片文件
- report 存放生成的報(bào)告
- configs.py 設(shè)置報(bào)告的參數(shù),比如作者滩届,日期集侯,數(shù)據(jù)源等等,每次使用時(shí)可以僅僅修改設(shè)置便生成不同報(bào)告
而這些我們可以打包在一起放入report文件夾帜消,把文檔結(jié)構(gòu)調(diào)整為:
-
report 自動(dòng)化報(bào)告的工作目錄
- ... 其他文件不動(dòng)
- configs.py 在此需要添加設(shè)置報(bào)告的編號(hào)棠枉,且報(bào)告編號(hào)需要唯一
- main.ipynb 文件的主執(zhí)行和調(diào)試文件,不會(huì)執(zhí)行泡挺,僅僅作為母版
-
data
- static_data.csv
-
reports 存放生成的報(bào)告
- report1 報(bào)告1
-
report2 報(bào)告2
- main.ipynb 從上上級(jí)文件夾復(fù)制辈讶,每次執(zhí)行時(shí)都會(huì)變化
- configs.py 基于上上級(jí)文件夾中的configs.py文件生成,作為此報(bào)告設(shè)置的記錄
-
data
- dynamic_data.csv
- image 存放生成的圖片文件
注意:
在文檔結(jié)構(gòu)調(diào)整后娄猫,我們還需要添加輔助用的小腳本贱除,用途為:
- 基于configs.py在reports文件夾生成制作報(bào)告用的文件夾,并生成如下的目錄結(jié)構(gòu)
-
report1 報(bào)告1
- main.ipynb 從上上級(jí)文件夾復(fù)制媳溺,每次執(zhí)行時(shí)都會(huì)變化
- configs.py 基于上上級(jí)文件夾中的configs.py文件生成月幌,作為此報(bào)告設(shè)置的記錄
- data
- image 存放生成的圖片文件
-
report1 報(bào)告1
- 檢查reports文件夾中的目錄結(jié)構(gòu)是否正確
檢查目錄的小例子:
更復(fù)雜和完善的請(qǐng)根據(jù)報(bào)告形式自行編寫(xiě)
import os
import logging
logging.info("當(dāng)前目錄 : {}".format(os.getcwd()))
def check_folder(folder_name):
if os.path.exists(folder_name):
logging.info("文件夾已創(chuàng)立:{}".format(folder_name))
else:
logging.warning("文件夾未創(chuàng)立:{}".format(folder_name))
os.makedirs(folder_name)
logging.info("文件夾創(chuàng)立完畢:{}".format(folder_name))
check_folder("./Example_2")
# 修改當(dāng)前工作目錄
os.chdir("./Example_2")
logging.info("當(dāng)前目錄 : {}".format(os.getcwd()))
import configs
check_folder(configs.report_name)
WARNING:root:文件夾未創(chuàng)立:Report1
# 創(chuàng)建文件夾
for folder in ['data', 'image']:
check_folder(r"./reports/{}/{}".format(configs.report_name, folder))
# 復(fù)制文件
import shutil
for filename in ['main.ipynb', 'configs.py']:
if os.path.exists(r"./reports/{}/{}".format(configs.report_name, filename)):
logging.warning("文件未添加:./reports/{}/{}".format(configs.report_name, filename))
else:
shutil.copy(filename, r"./reports/{}/{}".format(configs.report_name, filename))
logging.info("已復(fù)制文件:{}".format(filename))
WARNING:root:文件未添加:./reports/Report1/main.ipynb
WARNING:root:文件未添加:./reports/Report1/configs.py
2. main.ipynb的拆分
這里分為兩種情況:
- 報(bào)告尚未完全自動(dòng)化,還需要人工干涉
由于main.ipynb在每次執(zhí)行時(shí)結(jié)果會(huì)不同悬蔽,變動(dòng)時(shí)無(wú)法保持同步扯躺,所以可以對(duì)其內(nèi)容進(jìn)行拆分,分為方法部分和人工設(shè)置部分蝎困,以實(shí)現(xiàn)方法部分通用缅帘,人工設(shè)置部分每篇報(bào)告都輸入不同。 - 報(bào)告已經(jīng)完全自動(dòng)化
這時(shí)候main.ipynb僅僅是作為一個(gè)調(diào)試工具难衰,把其中的方法保存為main.py钦无,之后直接執(zhí)行main.py即可
TODO :
具體拆分方法和main.ipynb的組織方式會(huì)在之后補(bǔ)充。
3. 設(shè)置git添加時(shí)的忽略文件
所以對(duì)于生成報(bào)告所用的公用文件盖袭,我們用Git進(jìn)行版本控制失暂,而每次報(bào)告都會(huì)不同的設(shè)置或者數(shù)據(jù)彼宠,以及生成文件,我們需要讓Git忽略掉它們弟塞,但是還要保證文件的組成結(jié)構(gòu)沒(méi)有變化凭峡。
比如對(duì)于調(diào)整前的文檔結(jié)構(gòu),.gitignore的文件內(nèi)容添加如下
\__pycache__
*.pyc
.ipynb_checkpoints
data/data.csv
image/*
report/*
分別忽略了:
- python導(dǎo)入模塊時(shí)的生成文件
\__pycache__决记、*.pyc
- ipynb的歷史記錄文件
.ipynb_checkpoints
- 每份報(bào)告都會(huì)
而對(duì)于調(diào)整后的文檔結(jié)構(gòu)摧冀,.gitignore的文件內(nèi)容可改為添加如下
\__pycache__
*.pyc
.ipynb_checkpoints
report/*
進(jìn)行修改后的結(jié)果請(qǐng)參照Example_3