概要
最近有个活,想要python进行自动化,每周一次,往word里面插入图片、表格,翻翻 python-docx 官方文档 感觉挺简单的,以下为大概流程
整体架构流程
- 什么环境、linux/win
- 考虑怎么得到数据,从哪得到,什么方式
- 是否数据加工、在什么层面加工、在数据库层面还是python代码
- 需要什么样的东西、绘图、三线表之类的
- 放在什么地方跑、是否有限制条件
- 多久跑一次、需要跑多久
疑难点
- 数据处理 pandas
- 在插入图片的时候想让一张或者多张图片在一行
- linux 环境 绘图 不显示以及中文乱码
- 调度问题 每天掉,文件仅在每周周一生成
技术细节
在插入图片的时候想让一张或者多张图片在一行**
# 图片地址
pic_list= ['123.jpg','123.jpg','234.jpg','123.jpg']
# 向上取整
ceil = math.ceil(len(pic_list)/2)
# 生成一个ceil行2列的表格,保证表格数量 > 图片数量
table = word.add_table(rows=2, cols=2)
# 对表格进行枚举
for i,cell in enumerate(table._cells):
# 这个地方尤其注意 必须先拿到 paragraph 对象 才能run
run = cell.add_paragraph().add_run()
run.add_picture(pic_list[i], width=Inches(2.25))
实例:
该处有几个小地方
- 原本考虑图片不落地,直接转成流 传过来,然后写入,但发现linux环境 在绘制的时候总会报错 seek(0) ,并且考虑到后续维护,就取消了该想法
- 当图片的长度小于表格的时候,建议使用 try 方法去捕获,或者直接用 zip 拉链函数,这样也不会报错
- 注意调整word 的边距 以及图片大小,不然显示不完全
linux 环境 绘图 不显示以及中文乱码
把windows10环境下的中文字体拷贝到Linux系统中。
windows10字体默认文件夹为C:\Windows\Fonts。
挑选一个喜欢的 我这里用的simkai.ttf
import matplotlib
# 拿到
print(matplotlib.matplotlib_fname())
执行结果:
xxx\envs\demo_env_learn\lib\site-packages\matplotlib\mpl-data\matplotlibrc
然后cd 到 xxx\envs\demo_env_learn\lib\site-packages\matplotlib\mpl-data
目录下
cd xxx\envs\demo_env_learn\lib\site-packages\matplotlib\mpl-data
mv simkai.ttf fonts/ttf/simkai.ttf
清除用户目录的缓存即可
rm -rf .cache
放在什么地方跑、是否有限制条件
linux 环境运行 考虑调度 crontab 将python 文件 用shell 包一层 方便获取 执行日志 也方便考虑传值问题
调度问题 每天掉,文件仅在每周周一生成
在python 代码中限制 当且仅当 传入的数据日期 和 为周1 的时候执行