当前位置:网站首页>(幼升小信息-03)批量模板制作 幼儿基本信息收集文件夹(包含PDF、Word、证件文件夹)
(幼升小信息-03)批量模板制作 幼儿基本信息收集文件夹(包含PDF、Word、证件文件夹)
2022-06-13 11:14:00 【reasonsummer】
一、背景需求
2022年6月上海幼升小登记,由于疫情全部在网上进行,如何让家长用手机、电脑自主修改“草表”信息,如何快速从家长手中收集各类证件,就成为大班老师的工作重点。
二、操作思路:
从一网通办 下载了28份幼儿PDF草表,PDF文件名=名字(身份证).py
为了便于查找,在每位孩子名字前加上学号(两位数),PDF文件名=学号名字(身份证).py
通过各种信息的收集,我认为第一次发送给家长的文件夹里需要包括四项内容“。
1、查看用的PDF草表(固定格式)
2、可以编辑添加修改信息的DOCX文件(编辑格式)
3、证件收集:”上海户籍“文件夹(内含6个子文件夹),外省户籍(内含有8个子文件夹)
4、word修改过程的文字记录+三份家长电子签字(截图或PDF)(教师整理)
01上海户籍需要需要提供的证明:
02外省户籍需要需要提供的证明:
03修改过程及签名的预设六个文件夹:
经过思考大致需要以上的文件及文件夹。
三、代码演示
(一)操作准备:
本代码是将各种代码拼贴修改而成的,我对原理一知半解,无法变通。因此用死办法必须完全按照操作说明进行准备,才能保证运行成功。
1.路径:
(1)在D盘下新建test 在test下新建info。
(2)将幼儿X份PDF文件放入d:\test\info
(3)在D:\test\info下新建“文本文档”=py文件
请先制作py文件吧(代码如下)
from logging import root
import time
print('-----------202206大班登记草表文件夹批量生成代码-----------')
print('--------------------------------------------------------')
print('\n操作说明\n')
print('1.选择文件夹:\n打开VS页面-左上角“文件”-“打开文件夹”-D-test-info(鼠标点击一下info, 打开右下角“选择文件夹”)\n')
print('2.新建 D盘 下 test 下 info三级目录\n')
print('3.把本代码py放在D盘 下 test 下 info内(py和PDF同一级目录)\n')
print('--------------------------------------------------------')
time.sleep(1)
answer=int(input('你已经按照操作说明进行设置了吗?\n已经设置=1,没有设置=2\n'))
if answer==1:
print('-----------准备.把PDF草表放在一个文件夹内:D盘的test\info-----------')
time.sleep(3)
print('-----------第1步.脚本实现:将PDF文件转Word-----------')
print('-----------目的.家长用Word进行信息修改(比如红字加粗)-----------')
time.sleep(3)
import os
from pdf2docx import Converter
import time
import PyPDF2
def pdf_word():
global file_path
file_path = r'D:\test\info'
# 创建一个对应新文件夹,用于后期存放word文件
new_file = os.makedirs(file_path+ '\\1')#生成的1文件夹,但不把资料导入其中
# new_file = os.makedirs(file_path + '\\docx')#生成的docx文件夹
# new_file_path = r'D:\test\nn\docx' #生成的docx文件都放在docx文件夹下面
new_file_path = r'D:\test\info'#生成docx文件和pdf文件在同一级目录下
#这里需要在同个文件夹下
# 拿到目标文件夹下面的所有pdf
for root, dirs, files in os.walk(file_path):
#
# root:路径
# dirs:目录
# files:文件
#
for f in files:
suff_name = os.path.splitext(f)[1] # 判断文件名后缀是否为pdf
if suff_name != '.pdf':
pass
else:
file_name = os.path.splitext(f)[0] # 获取文件名
target_pdf_name = file_path + '\\' + f # 目标pdf 文件路径
word_name = new_file_path + '\\' + file_name + '.docx' # 转换的word文件
print(word_name)
try:
PyPDF2.PdfFileReader(open(target_pdf_name, "rb")) # 检验pdf文件是否可以正常打开
cv = Converter(target_pdf_name)
cv.convert(word_name)
cv.close()
except PyPDF2.utils.PdfReadError:
print(target_pdf_name, "Invalid PDF file")
except OSError:
print("Not PDF file")
else:
pass
if __name__ == '__main__':
start = time.time()
pdf_word()
end = time.time()
print('task is over: %.2f' % (end-start))
# 把docx文件移出到PDF同级,删除docx文件夹
# 删除1文件夹,如果没有新建的文件夹1,pdf转docx就不会运行。所以必须新建一个(为了拷贝时不至于多复制一个空的1文件,这里把这个空文件夹删除
os.rmdir(r'D:\test\info\1')
print('-----------第1步.end-----------')
print('-----------第2步.幼儿草表pdf和docx导入同名文件夹-----------')
print('-----------目的.批量生成个人文件夹----------------')
import os
import shutil
# 获取当前目录下所有文件及目录
# file_path2='D:/test/'
listDir = os.listdir(r'D:\test\info') # D/test/info
# 遍历
folders1=[]
for dir in listDir:
# 判断如果是文件夹或是自己则忽略
if os.path.isdir(dir) or '01合并.py'== dir:
continue
# 分离文件名和扩展名,获取不带后缀的文件名
dirName = os.path.splitext(dir)[0]
# 判断是否存在同名目录,
# 不存在则将创建此目录,将同名文件移动到目录,
# 存在则直接移动到此目录
if not os.path.exists(dirName):
os.mkdir(dirName)
# os.makedirs(dirName)
shutil.move(dir, dirName)
folders1.append(dirName)
folders2=[]
[folders2.append(x) for x in folders1 if x not in folders2]
print(folders2)
print('-----------第2步.end-----------')
print('-----------第3步.每个幼儿文件夹里都有装“佐证材料-证件照片"的文件夹-----------')
print('-----------目的.便于家长根据文件名要求,把各类证明材料放入其中----------------')
import os
import itertools
import time
file_dir=r'D:/test/info'
for root,dirs,files in os.walk(file_dir,topdown=False): # 提取root 所有一级路径、二级路径(没有文件) dir=03 04文件夹,file 文件名
# print(root) # D:/test/info\03 D:/test/info\04 D:/test/info 两个三级路径、1个一级路径
# print(dirs) #[][]['03', '04'] 两个文件夹在一起
# print(files)#[][]['01合并.py', '02打包.py', '123.py'] 非文件夹的py
for name in dirs: #name来自['03', '04']遍历循环,
root_path=os.path.join(root,name) #组合文件路径+文件夹名 root+03\root+04
# print(b)
folders1=['01 上海户籍']
genders1 = ['01 户口本(第1页地址 户主页 幼儿页)','02 房产证(第一页到最后一页或者租赁合同)',
'03 人户分离证明(居住地入学提供)','04 父母身份证','05 孩子出生证明','06 其他证明']#二级
for folder1,gender1 in itertools.product(folders1, genders1):#folder=一级目录地址 gender=添加的子文件夹
os.makedirs(os.path.join(root_path,folder1,gender1))
# os.mkdir(os.path.join(b,folder1,gender1))
folders2=['02 外省户籍']
genders2 = ['01 户口本(第1页地址 户主页 幼儿页)','02 房产证( 第一页到最后一页或者租赁合同备案等)',
'03 父母双方身份证','04 父母双方与孩子的居住证或者凭证','05 积分证明','06 孩子出生证明',
'07 父母社保缴纳情况或者灵活就业证明','08 其他证明']#二级
for folder2,gender2 in itertools.product(folders2, genders2):#folder=一级目录地址 gender=添加的子文件夹
os.makedirs(os.path.join(root_path,folder2,gender2))
folders3=['03 修改过程及签名']
genders3 = ['01第1次修改','02第2次修改','03第3次修改','04(草表修订)签名','05(正表预览)签名','06(正表回执)签名']#二级
for folder3,gender3 in itertools.product(folders3, genders3):#folder=一级目录地址 gender=添加的子文件夹
os.makedirs(os.path.join(root_path,folder3,gender3))
print('-----------第3步.end-----------')
print('-----------第4步.每个幼儿文件夹打包rar-----------')
print('-----------目的.便于单独私发家长微信----------------')
def compress(input_file, output_file, root_path,
rar_path='C:/"Program Files (x86)"/WinRAR/WinRAR.exe'):
#rar_path='C:/"Program Files (x86)"/360/360zip/360zip.exe'):
"""
调用CMD命令压缩文件/文件夹
Parameters
----------
input_file : 需要压缩的文件/文件夹名。从哪一级目录开始,就会从哪一级开始压缩;
output_file : 压缩文件的输出路径及其压缩的文件名;
可以是.rar, .zip;
root_path: input_file 所在目录;
rar_path : WinRAR软件的安装路径,
The default is 'C:/"Program Files"/WinRAR/WinRAR.exe'.
NOTE: 路径和文件名中带空格的时候一定要多加一重引号!!
"""
cmd_command = r'%s a %s %s' % (rar_path, output_file, input_file)
os.chdir(root_path) # 切换工作目录
os.system(cmd_command)
if os.system(cmd_command)==0:
print('Successful backup to', output_file)
else:
print('Backup FAILED', input_file)
root_path = "D:/test/info"
lists = os.listdir(root_path)
for fp in lists:
if '01合并.py'== fp :
continue
input_file = '"' + fp + '"' #待压缩的文件路径及文件,多加一重引号
output_file = '"' + fp + '.rar"' #压缩文件的输出路径及文件名,多加一重引号
compress(input_file, output_file, root_path)
print('-----------第4步.end-----------')
if answer==2:
print('我去设置一下/等会儿再说')
pass
2.VS文件夹设置
本文有一个固定打开路径,请一定要设置好,否则都是报错
基本设置完成。
(二)代码内容解析构成:
1、简要需求:
将3个PDf文件转换成3个Word,3套Word+PDF合并到自己同名文件夹(3个)。3个文件夹内都插入“上海户籍”“外省户籍”“修改过程和签字”三个相同的文件夹.最后打包RAR文件
2、代码的构建思路和步骤如下:
3、运行效果图片展示。
每个文件夹里,插入相同3个文件夹,主要用了以下的代码:
此时每个孩子文件夹里都有5个文件
(4)代码运行及文件生成过程的视频演示
python幼升小信息登记文件夹打包视频
三、实际运用情况反馈
五、总结反思:
前期(5月31日):分段测试
从5月31日开始制作“幼升小信息登记文件夹打包.py”,陆续出现各种问题,最初是分别运行四组代码逐步完成了文件打包。
效果:提高效率、正确率
这个五组资料文件包,为家长提供便于修改的DOCX,也能根据证件文件夹名称添入各类证件,(打包回传)后,统一的文件名格式(学号名字+内容)便于教师快速分类,电子稿信息的提供,大大减轻了教师手动输入、人工整理的工作量,
后期(6月11日):串联测试
在11天的调试后,最终在6月11日打通了全部堵点,将“pdf转docx""PDF+Docx合同到同名文件夹”“每个文件里都加入三个固定文件夹(及子文件)‘”“打包rar”,组合在一起了。
效果:了解路径的提取和组合。
破解批量加入“三个固定文件夹及子文件”的问题,花费了很长的时间。root和file的提取,及组合,删除多余文件夹,不要打包py文件等等。python中的任何小细节会直接影响程序的结果。
六、感悟:
为了幼儿园办公实际任务,我研究了这个打包文件的代码,虽然完成后它的使用效率高,但是为了这个只用一次的项目(幼升小证件收集批量文件夹的打包),需要花费几十倍的时间去研究,这个过程常常让我感到是否值得?
也许只有自己能掌握更多编程方法,能够应对千变万化的教学、办公的批量需求时,就会真正感觉到前期付出的学习时间是值得的、是有价值的。
边栏推荐
- 欧拉函数和线性筛求欧拉函数
- Nim游戏阶梯 Nim游戏和SG函数应用(集合游戏)
- Inclusion exclusion principle (number divisible)
- Brief description of redo logs and undo logs in MySQL
- 2021CCPC网络赛题解加总结
- CommonAPI与AUTOSAR AP通讯管理的异同
- 领导说要明天上线,这货压根不知道开发流程
- [tcapulusdb knowledge base] tcapulusdb cluster management introduction
- [tcapulusdb knowledge base] Introduction to tmonitor stand-alone installation guidelines (II)
- We spent a weekend migrating 3.7 million lines of code to typescript
猜你喜欢
17张图:读懂国内首个《主机安全能力建设指南》
[tcapulusdb knowledge base] Introduction to tmonitor stand-alone installation guidelines (II)
【ROS】MoveIt-rviz-七自由度机械臂仿真
Database learning notes (Chapter 16)
Use of servers
There is no suspense about the first one in the overtime table of the Internet company!
[tcapulusdb knowledge base] tcapulusdb operation and maintenance doc introduction
塔米狗知识|全面剖析国有企业并购含义及其作用
C#/VB. Net to generate directory bookmarks when word is converted to PDF
[tcapulusdb knowledge base] Introduction to tmonitor background one click installation (I)
随机推荐
【TcaplusDB知识库】TcaplusDB单据受理-建表审批介绍
Vivo large scale kubernetes cluster automation operation and maintenance practice
Codeforces Round #798 (Div. 2)ABCD
vivo大规模 Kubernetes 集群自动化运维实践
Apache apisik v2.14.1 exploratory release to expand into more fields
[tcapulusdb knowledge base] tcapulusdb tmonitor module architecture introduction
服务器的使用
判定二分图和二分图最大匹配
宝塔添加一个网站:PHP项目
Do you agree that the salary of hardware engineers is falsely high?
The road of ospo construction of Weibo: how to promote enterprise open source through ospo construction?
Brief description of redo logs and undo logs in MySQL
22. Class E power amplifier design of ads usage record (Part 2)
[tool chain series] Notepad++
[tcapulusdb knowledge base] Introduction to tmonitor system upgrade
微众银行OSPO建设之路:如何通过OSPO的建设推动企业开源?
Multithreading starts from the lockless queue of UE4 (thread safe)
Similarities and differences between commonAPI and AUTOSAR AP communication management
Redis related
Apache APISIX v2.14.1 探索性版本发布,进军更多领域