1
wxf666 2022-08-03 16:29:00 +08:00
咋觉得放进数据库里( SQLite 都行),写个小脚本,几秒钟都生成好了呢
|
2
buliugu 2022-08-03 16:32:54 +08:00
存储换到数据库,多线程读取然后合并再生成 pdf 。这个步骤可以做成任务队列一直运行
|
3
wxf666 2022-08-03 16:50:13 +08:00
@buliugu 3000 题,用不上多线程吧。。
就算数据库 B+树 3 层,3000 题每题都在不同页上,最差也就随机读 6000 页而已(第一层 root 页被缓存) 对于 SQLite 4K 一页,也就随机读 6000 次 4K 现在随便一个固态 4K 的 IOPS 都几万几十万了吧 实在不行,丢 RamDisk 呗,每题 1KB ,10W 数据大概也就占 100MB 内存吧 不想用 RamDisk ,SQLite 也有读取整个数据库文件至内存的选项 |
4
tangbj OP @wxf666 请问具体用什么编程语言呢?算是比小白好一丢丢,能找一些现成的源码修改。对了,有的题目是有图片的,excel 存了路径,导进数据库也同样用路径吗?
|
5
wxf666 2022-08-03 17:25:40 +08:00 2
@tangbj 个人觉得,python 干这活儿会很快
有点怀疑,你这场景这么具体,真的能找到现成源码么。。 把路径当字符串存进数据库,很正常啊 我觉得,你放点数据出来,可能有人看着简单,顺手帮你写了代码也说不定 |
6
GodThemselves 2022-08-03 17:43:13 +08:00
最近刚整过一个 excel 转 word 的 python 脚本,excel 中的列头+行数据转换为 word 里的一个段落。目前不知道你这个不同的题型是怎么存的,可能会麻烦点。
|
7
wxf666 2022-08-03 18:00:58 +08:00
@GodThemselves 看起来,要写的 python 代码只需输出 markdown ,
后续是由楼主的 markdown 转 pdf 工具来完成余下的工作(估计有自定义的 css ?), 这就很舒服啦~ |
8
tangbj OP @GodThemselves [腾讯文档] 题库演示数据
https://docs.qq.com/sheet/DRld4ck1Ec09oV0FF 四种题型里的三种,还有复合题没想好怎么存,还没做清洗。 生成的文档只要有目录就行,格式也没有特殊要求,最终目的就是生成 PDF |
9
Vegetable 2022-08-03 19:11:06 +08:00
。。。。这个啊,这个用 Word 配合邮件合并就行了
|
10
Vegetable 2022-08-03 19:15:50 +08:00
|
12
Vegetable 2022-08-03 19:20:49 +08:00
|
13
Vegetable 2022-08-03 19:23:01 +08:00
@tangbj 还有图片啊,有点复杂了
https://jingyan.baidu.com/article/597035528f205c8fc0074019.html 也有教程,不过这么搞邮件合并就不是特别合适了,可能不好区分图片还是文字了 |
14
akira 2022-08-03 23:49:22 +08:00
感觉瓶颈是在 pdf 渲染 这里吧。 一秒渲染出一个 pdf 文件,差不多了啦。
|
15
krixaar 2022-08-04 08:44:02 +08:00
直接读 excel 排个序然后 python-docx 一行一行写就行了啊,add_paragraph 加一段落,add_picture 加一张图,出一个 docx 之后再转 pdf 难度就不大了吧?
|
16
GodThemselves 2022-08-04 10:24:52 +08:00
|
17
tangbj OP @GodThemselves 感谢老哥
|
18
wxf666 2022-08-04 16:48:54 +08:00
@GodThemselves 看起来,你的源码和 @tangbj 的需求还有距离,比如:『要根据筛选条件,比如根据年份、根据难度等』、要包含目录』…… @tangbj 真要改起来,估计要学不少东西……
有可能做成一个 word 模板,python 按需填入吗?这样改起来方便,也能先用 word 自定义样式了 比如,『问题模板.docx 』: (标题一样式,居中){{ 分类 3 }} {{ for 问题 in problems }} <word 的编号列表>({{ 问题.题型 }}){{ 问题.题目 }} {{ if 问题.题图 is not None }} {{ docx.添加图片(问题.题图) }} {{ end }} A.{{ 问题.A }} B.{{ 问题.B }} {{ if 问题.题型 != '判断题' }} C.{{ 问题.C }} D.{{ 问题.D }} {{ end }} {{ next }} 『答案模板.docx 』: (标题一样式,居中){{ 分类 3 }} {{ for 问题 in problems }} <word 的编号列表>正确答案:{{ 问题.正确答案 }} {{ 问题.年份 }} {{ 问题.考点 }} {{ 问题.解析 }} {{ if 问题.解析图 is not None }} {{ docx.添加图片(问题.解析图) }} {{ end }} {{ next }} |
19
GodThemselves 2022-08-04 16:53:29 +08:00
|
20
wxf666 2022-08-04 17:15:06 +08:00
@GodThemselves 文档生成这块,我也没啥经验
刚搜了搜,python 居然没有多少操控 markdown 的,几乎全是 markdown 转 html 的。。 虽说按楼主要求直接生成 markdown 很容易(还要处理下转义): for index, pro in enumerate(problems): fp.write(f'{index + 1}.({pro.题型}){pro.题目}\n') if pro.题图: fp.write(f'![]({pro.题图})\n') for j, choice in enumerate(filter(None, (pro.A, pro.B, pro.C, pro.D))): fp.write(…) 但通用性太差了,专为楼主需求定制,没长进多少经验…… 我自己的话,若想答,总想能干的更通用些,答案以后也更可能有用 |
21
wxf666 2022-08-04 20:51:19 +08:00
@GodThemselves @tangbj 又搜了搜,大致瞅了瞅,
『 docxtpl 』这个 python 库可以做到类似 18 楼 那样,预先建一个『模板.docx 』,然后填充 3000 题,最后保存成新文件(有点类似 9 楼 说的邮件合并?) 实在要用 Excel 存数据的话,『 pandas 』应该能比较好地满足楼主的需求:读取 Excel 、根据条件筛选 话说 @tangbj ,你的原始数据长啥样的? 不知你是不是被『如何把所有题型塞一张表里』难住了。其实不一定要全部塞一张表里的 |