【教学类-43-25】20241203 数独3宫格的所有可能-使用模版替换(12套样式,空1格-空8格,每套510张,共6120小图)
前期做数独惨宫格的所有排列,共有12套样式,空1格-空8格,每套510张,共6120小图)
【教学类-43-24】20241127 数独3宫格的所有可能(12套样式,空1格-空8格,每套510张,共6120小图)-CSDN博客文章浏览阅读1.7k次,点赞41次,收藏30次。【教学类-43-24】20241127 数独3宫格的所有可能(12套样式,空1格-空8格,每套510张,共6120小图)https://blog.csdn.net/reasonsummer/article/details/144069290
代码用的是生成一个docx,转一个PDF,最后把所有的PDF合并,这种方式转化PDF容易报错(保存时间不够),就出现程序中断,及时顺利运行不报错,也要3个半小时。
所以我想了半天,想到一个新的思路
1、用12套的第一套生成510张图片+1个基础样式,获得44张A4图纸
2、吧44张图纸合并在一个word内(这样转PDF快一点,稳定不报错)
3、在一套3宫格的510张基础样式(一个word)基础上,对里面的数字进行替换,如果不是空,就清空原来的数字,换成新的数字,如果是空,就继续留空
4.生成12个合并word,每个里面有44张图纸,再把每个合并word转成每个PDF。
但是测试过程中,总是出现第一张基本样式表的“样式X”字样没有替换成“样式01、样式02……”,测试无数次后,发现原来要想替换文字,段落的字体格式、间距、大小、必须一样才行。
代码展示
import math
from itertools import permutations# 测试11*11格,2*2一共4套3*3 宫格
'''
目的:数独3宫格(1,2,3)有12套不同的基础模板,对每套题目进行空1=空8的不重复获取。
(12套样式,空1格-空8格,每套510张,共6120小图)
本代码先做样式1,获取基本样式510张,打印时44页,然后尝试用替换方式制作另外的11款
作者:阿夏
时间:2024年11月30日 13:35
20:30-22:24'''import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,timeimport docx
from docx import Document
from docx.shared import Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qnfrom docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor
from datetime import datetime
from docx import Document
from docx.enum.text import WD_BREAK# 生成题库
import random
import copy# 开始时间
start_time = datetime.now()# 制作"单元格"# 几宫格
hsall=3
# int(input('3宫格数独=3\n'))
hs=hsall
# 内容太多了,容易报错,如果报错,就重新设置起始宫格数字1-8
start=1
# 第几套,第一套
sz=1print('------第1步:制作单元格-------')ll=['3'] # 如果输入345
mm=['34']# 3对应的套数是4*3套
gz=int(mm[0][0])*int(mm[0][1])
nn=['36']# 3对应的写入单元格的数字大小36磅
# ll=['3','4','5','6','7','8','9'] # 如果输入345
# mm=['43','43','32','32','32','32','32']# 3对应的套数是4*3套
# nn=['36','24','36','24','24','24','24']# 3对应的写入单元格的数字大小36磅
for r in range(len(ll)):if hsall ==int(ll[r]):# 底边几套.底边看有2份db=int(mm[r][0])# int(input('底边几套? 3\n'))# 侧边几套 侧边看也是2份print(db ) cb=int(mm[r][1])# int(input('侧边几套? 2\n'))print(cb)size=int(nn[r])print(size) # 写入单元格数字的大小(撑满格子)# 新建一个”装N份word和PDF“的临时文件夹
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\数独所有可能'# 新建“单独docx”输出文件夹
tencent=path+fr'\{hs}宫格'
os.makedirs(tencent,exist_ok=True)
tencent1=tencent+fr'\01_{hs}宫格_样式A_单独_X张A4_Y张小图'
os.makedirs(tencent1,exist_ok=True)# 计算不同模板中的单元格坐标,放在bg里
# 棋盘格子数量,# 如果正方形:底边2*侧边2,就是3*3宫格 2*2=4套,底边边格子数量就是3*2+1=7,侧边格子数量就是3*2+1=7,
# 如果长方形:底边3*侧边2,就是3*3宫格,3*2=6套 底边格子数量就是3*3+2=11,侧边格子数量就是3*2+1=7,
# if db==cb:
db_size = hs*db+db-1
cb_size= hs*cb+cb-1
print('{}宫格排列底{}侧{}共{}套,底边格子数{}'.format(hs,db,cb,db*cb,db_size ))
print('{}宫格排列底{}侧{}共{}套,侧边格子数{}'.format(hs,db,cb,db*cb,cb_size ))# 确定每个宫格的左上角坐标 00 04 40 44
bgszm=[]
for a in range(0,cb_size,hs+1): # 0-11每隔4,写一个坐标 侧边yfor b in range(0,db_size,hs+1): # 0-11每隔4,写一个坐标 侧边xbgszm.append('{}{}'.format('%02d'%a,'%02d'%b))
print(bgszm)
# 3宫格排列底3侧2共6套,底边格子数11
# 3宫格排列底3侧2共6套,侧边格子数7
# ['0000', '0004', '0008', '0400', '0404', '0408']# 转为元祖
start_coordinates = [(int(s[0:2]), int(s[2:4])) for s in bgszm]
cell_coordinates = []# 推算每个起始格子后面的单元格数字
for start_coord in start_coordinates:i, j = start_coordsubgrid_coordinates = []for x in range(hs):for y in range(hs):subgrid_coordinates.append((i + x, j + y))cell_coordinates.append(subgrid_coordinates)# 打印结果(元祖样式)
bg=[]
for coordinates in cell_coordinates:# print(coordinates) # [(4, 8), (4, 9), (4, 10), (5, 8), (5, 9), (5, 10), (6, 8), (6, 9), (6, 10)]for c in coordinates:print(c) # 元组 (1, 2) 样式s = ''.join(str(num).zfill(2) for num in c) # zfill将元组 (1, 2) 转换为字符串 '0102' 特别是(5,10)这种必须转成2个数字0510print(str(s)) # '12'bg.append(s) # '0102'
print(bg)
# 3列4行12个3*3格子
# ['0000', '0001', '0002', '0100', '0101', '0102', '0200', '0201', '0202',
# '0004', '0005', '0006', '0104', '0105', '0106', '0204', '0205', '0206',
# '0008', '0009', '0010', '0108', '0109', '0110', '0208', '0209', '0210',
# '0400', '0401', '0402', '0500', '0501', '0502', '0600', '0601', '0602',
# '0404', '0405', '0406', '0504', '0505', '0506', '0604', '0605', '0606',
# '0408', '0409', '0410', '0508', '0509', '0510', '0608', '0609', '0610',
# '0800', '0801', '0802', '0900', '0901', '0902', '1000', '1001', '1002',
# '0804', '0805', '0806', '0904', '0905', '0906', '1004', '1005', '1006',
# '0808', '0809', '0810', '0908', '0909', '0910', '1008', '1009', '1010',
# '1200', '1201', '1202', '1300', '1301', '1302', '1400', '1401', '1402',
# '1204', '1205', '1206', '1304', '1305', '1306', '1404', '1405', '1406',
# '1208', '1209', '1210', '1308', '1309', '1310', '1408', '1409', '1410']print('------第2步:制作3宫格的12套题的内容-------')# 制作3宫格的12套题目(没有空格,只有基础模板)
lst=[]
for b in range(1,hs+1):lst.append(b)
print(lst)permutations_list = list(permutations(lst))
numbers = [list(permutation) for permutation in permutations_list]
print(numbers)
# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
# 6种组合# 互相组合成3组
import itertools# 计算排列数量并生成所有可能的排列
combinations2 = list(itertools.permutations(numbers, hs))
# 包含相似的# 输出排列数量
print(len(combinations2))
# 120# # 把所有数字都提取成元素
ll=[]
for o1 in combinations2:for o2 in o1:for o3 in o2:ll.append(o3)print(ll)
print(len(ll))
# 1080v=hs*hs
# 9个数字抽取一组
f=[]
for i in range(int(len(ll)/v)):f.append(ll[i*v:i*v+v])
# print(f)
# print(len(f))
#120条# # # 遍历表格,把0、5、10相同的内容删除,横向的数字1234都正确了,现在只要排除竖向不对的P=[]
z=[]
for k in f: if int(k[0])!=int(k[3])!=int(k[6]) and int(k[0])+int(k[3])+int(k[6])==6 and\int(k[1])!=int(k[4])!=int(k[7]) and int(k[1])+int(k[4])+int(k[7])==6 and\int(k[2])!=int(k[5])!=int(k[8]) and int(k[2])+int(k[5])+int(k[8])==6 and\int(k[0])!=int(k[1])!=int(k[2]) and int(k[0])+int(k[1])+int(k[2])==6 and\int(k[3])!=int(k[4])!=int(k[5]) and int(k[3])+int(k[4])+int(k[5])==6 and\int(k[6])!=int(k[7])!=int(k[8]) and int(k[6])+int(k[7])+int(k[8])==6 :z.append(k)print(z)
print(len(z))# 12种基础样式
basis=[]
for hh in z:print(hh)basis.append(hh)
print(basis)
print(len(basis)) # 12种基础样式
# [1, 2, 3, 2, 3, 1, 3, 1, 2]
# [1, 2, 3, 3, 1, 2, 2, 3, 1]
# [1, 3, 2, 2, 1, 3, 3, 2, 1]
# [1, 3, 2, 3, 2, 1, 2, 1, 3]
# [2, 1, 3, 1, 3, 2, 3, 2, 1]
# [2, 1, 3, 3, 2, 1, 1, 3, 2]
# [2, 3, 1, 1, 2, 3, 3, 1, 2]
# [2, 3, 1, 3, 1, 2, 1, 2, 3]
# [3, 1, 2, 1, 2, 3, 2, 3, 1]
# [3, 1, 2, 2, 3, 1, 1, 2, 3]
# [3, 2, 1, 1, 3, 2, 2, 1, 3]
# [3, 2, 1, 2, 1, 3, 1, 3, 2]# # # 12道题目print('---------第3步,原始列表生成样式1,了解数量和空格位置----------')
# 读取每一款,假设任意缺1空、任意缺2空,任意缺三空
# 原始列表
import itertools
m=1for a in basis[:sz]:# 做每种的样式模版一页doc = Document(path+fr'\数独长方形({hs}宫格)合并版12标.docx'.format(hs)) # 获取第一段first_paragraph = doc.paragraphs[0]# 在段落中添加运行(run)run = first_paragraph.add_run(f"{hs}宫格数独_样式A_标准答案")# 设置字体为黑体# run.font.name = '等线 (中文正文)'# 设置字号为32磅run.font.size = Pt(20)run.font.bold = True# 设置段落居中对齐first_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # table = doc.tables[0] # 表0,表2 写标题用的# 标题写入3、5单元格 for t in range(0,hs*hs): # 0-5是最下面一行,用来写卡片数字pp=int(bg[t][0:2]) # qq=int(bg[t][2:4])k=str(a[t]) # 提取list图案列表里面每个图形 t=索引数字# print(pp,qq,k)# 图案符号的字体、大小参数run=table.cell(pp,qq).paragraphs[0].add_run(k) # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = '黑体'#输入时默认华文彩云字体# run.font.size = Pt(46) #输入字体大小默认30号 换行(一页一份大卡片run.font.size = Pt(130) #是否加粗# run.font.color.rgb = RGBColor(150,150,150) #数字小,颜色深0-255run.font.color.rgb = RGBColor(50,50,50) #数字小,颜色深0-255run.bold=True# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#居中 doc.save(path+fr'\数独{hs}宫格数独_样式A_空00基本样式.docx')#保存为XX学号的电话号码word time.sleep(2)# 12张一页的样式n=0xx=0for x in range(start,hs*hs):# 如果报错,就从相应的宫格数字继续生成l1=[]# 使用 combinations 生成所有不重复的组合combinations = list(itertools.combinations(range(len(a)), x))# 1有9次,2有36次,,3有84次,4有84次,3有84次,3有84次,3有84次,3有84次,3有84次,3有84次# 打印组合及其索引,并将索引位置的内容变成 ''for comb in combinations:# 创建副本以避免修改原始列表modified_list = a[:]# 将组合中的索引位置内容替换为 ''for index in comb:modified_list[index] = ''# print(f"{modified_list}")# print(f"Combination: {[modified_list[i] for i in comb]}, Indices: {comb}")l1.append(modified_list)# 输出组合的数量# print(l) print(f"{x}空有{len(l1)}种")# 1空有9种# 2空有36种# 3空有84种# 4空有126种# 5空有126种# 6空有84种# 7空有36种# 8空有9种# 9空有1种n+=len(combinations)# # 3宫格1套,511种,print(n) # # 3宫格1套,12种图案,每种510,共6132种,# print(n*len(basis))# print(n*576)# 将嵌套列表转换为扁平列表flat_list = [item for sublist in l1 for item in sublist]# print(flat_list)print(len(flat_list))# 如果条数不满20条,只有一页if len(l1) <=gz:print(f"{len(l1)} 在范围 1页 内")kong = gz - len(l1)print(kong)Y = 1xx+=Y# 判断多页情况下,最后一页是否能够凑满20行,凑不满,补空else: for z in range(gz, gz*gz, gz):if z < len(l1) <= z + gz:# 出现过正好40条,只有两页,但出现了第3空页,少了小于等于z+2-print(f"{len(l1)} 在范围 {z}-{z+gz} 内")# 补多少的空格kong = z + gz - len(l1)print(kong)# 有几页Y = int((z + gz) / gz)xx+=Y# 一个列表里面有7个空w = [''] * hs*hs# 需要14个这种7空的嵌套列表v = [w] * kong# print(v)#i 把实际的填写内容+补充的空格,凑满20的倍数页l=l1+vprint(l)print(len(l))# 80 flat_list = [item for sublist in l for item in sublist]# 将扁平列表分割成每组12个元素的子列表grouped_list = [flat_list[i:i + gz*hs*hs] for i in range(0, len(flat_list), gz*hs*hs)]print(grouped_list) # 20:30-print('------第4步:写入docx,word表格正好12格子,写入1页12个-------')# 这里for z in range(len(grouped_list)):doc = Document(path+fr'\数独长方形({hs}宫格)合并版12.docx'.format(hs)) # 获取第一段first_paragraph = doc.paragraphs[0]# 在段落中添加运行(run)run = first_paragraph.add_run(f"{hs}宫格数独_样式A_空{x:02}格{len(l1):03}种_第{z+1}/{len(grouped_list)}页")# 设置字体为黑体run.font.name = '黑体'# 设置字号为32磅run.font.size = Pt(20)run.font.bold = True# 设置段落居中对齐first_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # table = doc.tables[0] # 表0,表2 写标题用的# 标题写入3、5单元格 for t in range(0,len(bg)): # 0-5是最下面一行,用来写卡片数字pp=int(bg[t][0:2]) # qq=int(bg[t][2:4])k=str(grouped_list[z][t]) # 提取list图案列表里面每个图形 t=索引数字# print(pp,qq,k)# 图案符号的字体、大小参数run=table.cell(pp,qq).paragraphs[0].add_run(k) # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = '黑体'#输入时默认华文彩云字体# run.font.size = Pt(46) #输入字体大小默认30号 换行(一页一份大卡片run.font.size = Pt(size) #是否加粗# run.font.color.rgb = RGBColor(150,150,150) #数字小,颜色深0-255run.font.color.rgb = RGBColor(50,50,50) #数字小,颜色深0-255run.bold=True# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#居中 doc.save(tencent1+fr'\{hs}宫格数独_样式A_空{x:02}有{len(l1):03}种_{z+1:02}.docx')#保存为XX学号的电话号码word time.sleep(2)print(f'共有{xx}张A4',f'共有{n}张小图')
# 共有44张A4 共有510张小图 xx=44
n=510# print('---------第5步,将样式1的所有docx合并到一个docx内----------')import os
from win32com import client
from docx import Document# 设置路径
template_path = path+fr'\数独{hs}宫格数独_样式A_空00基本样式.docx'#保存为XX学号的电话号码word
# template_path = path+r'\数独长方形(3宫格)合并版12空.docx'
# 添加在第一个基本样式文档里# 合并docx的路径
n1=f'02_{hs}宫格_样式模版_合并_{xx}张A4_{n}张小图'
tencent2=tencent+fr'\{n1}'
os.makedirs(tencent2,exist_ok=True)output_path = tencent2 + fr'\{n1}.docx' # 替换为你希望保存的文件路径word合并# 打开Word应用程序
word = client.Dispatch("Word.Application")
word.Visible = False# 打开模板文档
doc = word.Documents.Open(template_path)# 获取最后一个段落
last_paragraph = doc.Paragraphs(doc.Paragraphs.Count)# 遍历源文件夹中的所有Word文件
# 遍历源文件夹中的所有文件
# files = [f for f in os.listdir(tencent1) if f.endswith('.docx')]
# for filename in files[1:]: # 跳过第一个文件
for filename in os.listdir(tencent1):# if filename.endswith('.docx'):file_path = os.path.join(tencent1, filename)temp_doc = word.Documents.Open(file_path)# 复制每个文档的内容到模板的最后first_para = temp_doc.Paragraphs(1)new_para = doc.Content.InsertAfter(first_para.Range.Text + "\n")# 复制表格到模板的最后for table in temp_doc.Tables:table.Range.Copy()last_paragraph.Range.Paste()doc.Content.InsertParagraphAfter()time.sleep(4)# 删除表格后的一个空行last_paragraph.Range.Delete()temp_doc.Close()# 保存修改后的文档
doc.SaveAs(output_path)
doc.Close()
word.Quit()
time.sleep(10)# print('---------第6步,将样式1一个docx转为一个PDF----------')
# from docx2pdf import convert
# # docx 文件另存为PDF文件
# inputFile = tencent2 + fr'\{n1}.docx'
# outputFile = tencent2 + fr'\{n1}.pdf' # # # 先创建 不存在的 文件
# f1 = open(outputFile, 'w')
# f1.close()
# # 再转换往PDF中写入内容
# convert(inputFile, outputFile)
# # 转换 .docx 文件为 PDF# time.sleep(5)print('---------第7步,读取样式1合并docx,将数字分别替换。----------')# 读取docx的表格数量,制作9*12和数字的列表,分别替换到0000-1520的坐标里,如果是空就不要写入
from docx import Document# 加载文档
doc1 = Document(output_path)
# 获取所有表格
tables1 = doc1.tables
# 打印表格数量
print(f'一共 {len(tables1)} 张表.')
# 1+44# li=['3','2','1','2','1','3','1','3','2']*12
# print(len(li))tencent3=tencent+fr'\03_{hs}宫格_样式{int(len(tables1)-1)}套_{xx}张A4_{n}张小图'
os.makedirs(tencent3,exist_ok=True)basisall=[]
for f in basis : # 从12条基础里分别替换,乘以12次ff=f*int(len(tables1))basisall.append(ff)
print(basisall)
print(len(basisall))for g in range(len(basisall)):# 第一张基础样式表改数字table1 = doc1.tables[0] # 从0+1表格开始# 标题写入3、5单元格 for t in range(len(bg[0:9])): # 00,01,02,10,11,12,20,21,22pp=int(bg[0:9][t][0:2]) # qq=int(bg[0:9][t][2:4])cell_content =table1.cell( pp, qq).textif cell_content !='': table1.cell(pp, qq).text = '' # 清空单元格原来的数字,k1=str(basis[g][t]) # 换成新的数字# print(pp,qq,k1) # 图案符号的字体、大小参数run=table1.cell(pp,qq).paragraphs[0].add_run(k1) # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = '黑体'#输入时默认华文彩云字体# run.font.size = Pt(46) #输入字体大小默认30号 换行(一页一份大卡片run.font.size = Pt(130) #是否加粗# run.font.color.rgb = RGBColor(150,150,150) #数字小,颜色深0-255run.font.color.rgb = RGBColor(50,50,50) #数字小,颜色深0-255run.bold=True# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table1.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#居中# 第二到N张表改数字for bb in range(1,len(tables1)):table1 = doc1.tables[bb] # 从0+1表格开始# 标题写入3、5单元格 for t in range(len(bg)): # 0-5是最下面一行,用来写卡片数字pp=int(bg[t][0:2]) # qq=int(bg[t][2:4])cell_content =table1.cell( pp, qq).textif cell_content !='': table1.cell(pp, qq).text = '' # 清空单元格原来的数字,k1=str(basisall[g][t]) # 换成新的数字# print(pp,qq,k1)else: # 如果是空,就继续空,或者跳过k1='' table1.cell(pp, qq).text = k1 # print(pp,qq,k1)# 图案符号的字体、大小参数run=table1.cell(pp,qq).paragraphs[0].add_run(k1) # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = '黑体'#输入时默认华文彩云字体# run.font.size = Pt(46) #输入字体大小默认30号 换行(一页一份大卡片run.font.size = Pt(size) #是否加粗# run.font.color.rgb = RGBColor(150,150,150) #数字小,颜色深0-255run.font.color.rgb = RGBColor(50,50,50) #数字小,颜色深0-255run.bold=True# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table1.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#居中# 把样式01替换成样式XX # 遍历每个段落for para in doc1.paragraphs:for run1 in para.runs: if g==0: t1='样式A't2=f'样式{g+1:02}'if t1 in run1.text:# 替换文本但保留格式run1.text = run1.text.replace(t1, t2)else:t1=f'样式{g:02}'# t1=f'样式A't2=f'样式{g+1:02}'if t1 in run1.text:# 替换文本但保留格式run1.text = run1.text.replace(t1, t2)doc1.save(tencent3+fr'\{hs}宫格数独_样式{g+1:02}_{xx}张A4_{n}张小图.docx')time.sleep(2)# 把第一页的样式的X改成01】02print('---------第9步,把12个样式的docx转成12个PDF----------')
from docx2pdf import convert
for filename in os.listdir(tencent3):if filename.endswith('.docx'):docx_path = os.path.join(tencent3, filename)pdf_path = os.path.join(tencent3, filename.replace('.docx', '.pdf'))# 先创建不存在的PDF文件with open(pdf_path, 'wb') as f:pass# 转换并写入内容到PDF中convert(docx_path, pdf_path)time.sleep(5)tencent4=tencent+fr'\04_{hs}宫格_样式{gz}套基本形_每套{n}张_共{gz*n}小张.pdf'
os.makedirs(tencent4,exist_ok=True)print('----------第4步:把12个PDF合并为一个打印用PDF------------')# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfMerger
target_path = tencent
pdf_lst = [f for f in os.listdir(tencent3) if f.endswith('.pdf')]
pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfMerger()
for pdf in pdf_lst:print(pdf)file_merger.append(pdf)
time.sleep(10) file_merger.write(tencent4)file_merger.close()
# doc.Close()# # # # # # print('----------第5步:删除临时文件夹------------')
# # # # import shutil
# # # # # shutil.rmtree(tencent) #递归删除文件夹,即:删除非空文件夹# # # # time.sleep(3) # 防止转换时报错,预留生成时间# 记录程序结束时间
end_time = datetime.now()# 计算程序运行时间
elapsed_time = end_time - start_timeprint(f"动物数独{hs}宫格程序开始时间:{start_time}")
print(f"动物数独{hs}宫格程序结束时间:{end_time}")# 打印程序运行时间
print("程序运行时间:", elapsed_time)