报告自动化生成

9. 多人协作和版本管理

2018-07-27  本文已影响12人  数据成长之路

知识基础

学习目标

1. 文档结构调整

在多人协作时,我们要尽保持模板的同步,同时每个人对模板的完善都能集合在一起,而具体工作的内容不应该产生干扰。所以对于变动频繁的文件,我们可以集合起来然后进行同步时忽略处理。
对于第8章的文档结构,会常发生变动的有:

而这些我们可以打包在一起放入report文件夹,把文档结构调整为:

注意:

在文档结构调整后,我们还需要添加辅助用的小脚本,用途为:

  1. 基于configs.pyreports文件夹生成制作报告用的文件夹,并生成如下的目录结构
    • report1 报告1
      • main.ipynb 从上上级文件夹复制,每次执行时都会变化
      • configs.py 基于上上级文件夹中的configs.py文件生成,作为此报告设置的记录
      • data
      • image 存放生成的图片文件
  2. 检查reports文件夹中的目录结构是否正确

检查目录的小例子:

更复杂和完善的请根据报告形式自行编写

import os
import logging
logging.info("当前目录 : {}".format(os.getcwd()))
def check_folder(folder_name):
    if os.path.exists(folder_name):
        logging.info("文件夹已创立:{}".format(folder_name))
    else:
        logging.warning("文件夹未创立:{}".format(folder_name))
        os.makedirs(folder_name)
        logging.info("文件夹创立完毕:{}".format(folder_name))
check_folder("./Example_2")
# 修改当前工作目录
os.chdir("./Example_2")
logging.info("当前目录 : {}".format(os.getcwd()))
import configs
check_folder(configs.report_name)
WARNING:root:文件夹未创立:Report1
# 创建文件夹
for folder in ['data', 'image']:
    check_folder(r"./reports/{}/{}".format(configs.report_name, folder))
# 复制文件
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("已复制文件:{}".format(filename))
WARNING:root:文件未添加:./reports/Report1/main.ipynb
WARNING:root:文件未添加:./reports/Report1/configs.py

2. main.ipynb的拆分

这里分为两种情况:

  1. 报告尚未完全自动化,还需要人工干涉
    由于main.ipynb在每次执行时结果会不同,变动时无法保持同步,所以可以对其内容进行拆分,分为方法部分和人工设置部分,以实现方法部分通用,人工设置部分每篇报告都输入不同。
  2. 报告已经完全自动化
    这时候main.ipynb仅仅是作为一个调试工具,把其中的方法保存为main.py,之后直接执行main.py即可

TODO :
具体拆分方法和main.ipynb的组织方式会在之后补充。

3. 设置git添加时的忽略文件

所以对于生成报告所用的公用文件,我们用Git进行版本控制,而每次报告都会不同的设置或者数据,以及生成文件,我们需要让Git忽略掉它们,但是还要保证文件的组成结构没有变化。

比如对于调整前的文档结构,.gitignore的文件内容添加如下

\__pycache__
*.pyc
.ipynb_checkpoints
data/data.csv
image/*
report/*

分别忽略了:

而对于调整后的文档结构,.gitignore的文件内容可改为添加如下

\__pycache__
*.pyc
.ipynb_checkpoints
report/*

进行修改后的结果请参照Example_3


上一篇 下一篇

猜你喜欢

热点阅读