(教学类-07-02)20220122 破译电话号码-图形篇(图形随机重复)(大班主题《我要上小学》)
作者:互联网
思路:
第一种《破译电话号码》:手机号码和拆分后的号码(图案)都在同一个EXCEL里。这一份里手机号码拆分后的号码存在另一份表格里。并且选择图案不是按列固定选择(第一列固定用●,第二列固定用△),而是随机(第一列数字1,但用了不同的图形,)。
破解难题:
依旧感谢马先生优化了代码
一、基本材料准备
1.三个文件放在同一个文件夹下,
2. EXCEL-1的样式-phoneNumber.xlsx
(这些号码是随机生成的=RANDBETWEEN(13200000000-13900000000)
2. EXCEL-2的样式-coderesult.xlsx
3.word模板的样式-phonedoc.docx
(学号N,上排是爸爸手机号,共11位,下排是爸爸手机号,共11位
4.py 代码的内容
"""
@author: 马清新
@file: 马清新 手机号码数字批量变图形.py
@time: 2022/1/27 8:30
"""
# -*- coding: utf-8 -*-
import openpyxl
import random
try: #情况一先执行
wb = openpyxl.load_workbook(r'D:\test\04破译电话号码\04马先生_不同表_随机\phoneNumber.xlsx')
# 打开原始文件,电话号码在第2列B列
result = openpyxl.load_workbook(r'D:\test\04破译电话号码\04马先生_不同表_随机\coderesult.xlsx')
# 结果保存在其他excelli
phone = wb.active
# 提取原始文件WB的内容
codeResult = result.active
# 提取生成文件result的内容
# 父亲电话号码
symbol = ['▣','✽','✦', '♢', '▲', '●','♢', '✦','▣','✽','●'] #图形符号的列表
# 生成的11位号码的样式
for i in list(phone.columns)[1]: #phone的B列为手机号码, 按012345排序为1
phonestr = str(i.value)#phone电话号码的字符串从i的值里提取
print(phonestr)#打印 phonestr
col = 1#在新表,第一个号码填在A列上
for _ in phonestr[:]: # 在phonestr里面取空值
if i.value != 'dad':# 第一行的内容不要
if int(_) !=0:# 如果不等于0 1-9
str_temp = int(_) * random.choice(symbol) #打印symbol里随机的图形
else:#如果等于0
str_temp = '零'#如打印“'零'
codeResult.cell(row = i.row ,column = col).value = str_temp#存储在codeResult的EXCEL里面
col += 1 # 列数不断增加,直到11列用完
# 母亲电话号码
symbol = ['●'] #图形符号的列表
# 生成的11位号码的样式
for i in list(phone.columns)[2]: #phone的C列为手机号码, 按012345排序为1
phonestr = str(i.value)#phone电话号码的字符串从i的值里提取
print(phonestr)#打印 phonestr
col = 12#在新表,第一个号码填在L列上
for _ in phonestr[:]: # 在phonestr里面取空值
if i.value != 'mum':# 第一行的内容不要
if int(_) !=0:# 如果不等于0 1-9
str_temp = int(_) * random.choice(symbol) #打印symbol里随机的图形
else:#如果等于0
str_temp = '零'#如打印“'零'
codeResult.cell(row = i.row ,column = col).value = str_temp#存储在codeResult的EXCEL里面
col += 1 # 列数不断增加,直到11列用完
result.save(r'D:\test\04破译电话号码\04马先生_不同表_随机\coderesult.xlsx')#存储在codeResult的EXCEL里面
print('保存完毕...')
except Exception as e: #情况二先执行
print('执行错误,错误代码' , e)
# 第二部分:把EXCEL表格里面的数字图形逐一填入word模板内,生成大班幼儿作业题
# 本段为阿夏参考CSDN上的代码修改而成,版权归原作者。
from docxtpl import DocxTemplate
import pandas as pd
import os
zpath=os.getcwd()+'\\'
zpath=r'D:\test\04破译电话号码\04马先生_不同表_随机'+'\\'
file_path=zpath+r'\电话号码单'
# 二、遍历excel,逐个生成word(form.docx是前面的模板)
try:
os.mkdir(file_path)
except:
pass
tpl = DocxTemplate(zpath+'phonedoc.docx')
# 打开doc模板
phonedoc = pd.read_excel(zpath+'coderesult.xlsx')
# 压缩的EXCEL文档
N=phonedoc["N"] #N是学号
b1 = phonedoc["b1"]#根据word模板上的提示,把Excel的列字母与word列字母一一对应
b2 = phonedoc["b2"]
b3 = phonedoc["b3"]
b4 = phonedoc["b4"]
b5 = phonedoc["b5"]
b6 = phonedoc["b6"]
b7 = phonedoc["b7"]
b8 = phonedoc["b8"]
b9 = phonedoc["b9"]
b10 = phonedoc["b10"]
b11 = phonedoc["b11"]#b1-b11是爸爸的手机号码 word第一行
c1 = phonedoc["c1"]
c2 = phonedoc["c2"]
c3 = phonedoc["c3"]
c4 = phonedoc["c4"]
c5 = phonedoc["c5"]
c6 = phonedoc["c6"]
c7 = phonedoc["c7"]
c8 = phonedoc["c8"]
c9 = phonedoc["c9"]
c10 = phonedoc["c10"]
c11 = phonedoc["c11"]#c1-c11是妈妈的手机号码 word第二行
# str.rstrip()用于去掉换行符
# 遍历excel行,逐个生成
num = phonedoc.shape[0]
for i in range(num):
context = {
"N": N[i],#N是学号
"b1": b1[i],#b1-b11是爸爸的手机号码 word第一行
"b2": b2[i],
"b3": b3[i],
"b4": b4[i],
"b5": b5[i],
"b6": b6[i],
"b7": b7[i],
"b8": b8[i],
"b9": b9[i],
"b10": b10[i],
"b11": b11[i],
"c1": c1[i],#c1-c11是妈妈的手机号码 word第二行
"c2": c2[i],
"c3": c3[i],
"c4": c4[i],
"c5": c5[i],
"c6": c6[i],
"c7": c7[i],
"c8": c8[i],
"c9": c9[i],
"c10": c10[i],
"c11": c11[i],
# "eng": eng[i] 原作者模板上的内容
}
tpl = DocxTemplate(zpath+'phonedoc.docx')#使用已有的模板
tpl.render(context)
tpl.save(file_path+r"\{} 的电话号码.docx".format(N[i]))#保存为XX学号的电话号码word
# 三、把word所在文件夹打包压缩,便于发送。
import zipfile
# 设定压缩后的压缩包地址和名称
zipName = zpath + '破译电话号码.zip'
z = zipfile.ZipFile(zipName,'w',zipfile.ZIP_DEFLATED)
for dirpath,dirnames,filenames in os.walk(file_path):
for filename in filenames:
print(filename)
z.write(os.path.join(dirpath, filename),filename)
z.close()# 要记得close
# 附解压:
#将打包的文件解压
f = zipfile.ZipFile(zipName, 'r')
for file in f.namelist():
f.extract(file)
二、运行结果
程序第一步生成:coderesult.xlsx
程序第二步生成: 电话号码单
万分感谢马先生的代码,让《破译电话号码》的“按图案点数”实现了三款教具选择。
一、同一图案(●)
二、不同图案(固定列出现,不重复)
三、不同图案(固定列随机出现图形,有重复)
下阶段还想试试直接根据答案,倒推2个数列示题。
这是阿夏第8个实际运用到幼儿园教学中的Python自动化案例(教学类-07),希望能通过借鉴、实验、修改,将Python运用到幼儿园办公工作和幼儿教学中,提高工作效率,推动幼儿个性化学习和层次性学习成效。
标签:02,word,07,04,phonestr,str,电话号码,图形,phonedoc 来源: https://blog.csdn.net/reasonsummer/article/details/122754890