银川兴庆建设局网站电子商务网站建设的整体规划

张小明 2026/1/1 17:25:42
银川兴庆建设局网站,电子商务网站建设的整体规划,seo免费培训视频,自己怎么做淘宝客网站文章目录 前言一、批量html文件转化为pdf1. 问题描述2.代码3.程序下载链接 总结 前言 办公过程中#xff0c;总是会遇到一些大量重复做的事情#xff0c;通过生成一些小程序#xff0c;提高办公效率。 一、批量html文件转化为pdf 1. 问题描述 我需要将若干的html文件转换…文章目录前言一、批量html文件转化为pdf1. 问题描述2.代码3.程序下载链接总结前言办公过程中总是会遇到一些大量重复做的事情通过生成一些小程序提高办公效率。一、批量html文件转化为pdf1. 问题描述我需要将若干的html文件转换为pdf要求自主选择源文件和输出文件。新文件命名方式要么根据文件名重新生成学号姓名要么保持原文件名至于更复杂的命名方式后续碰到了再增加。2.代码一共是两个版本版本1是加了谷歌浏览器进去可能有700MB版本2是用的Edge浏览器不到50MB。代码也贴出来可以直接拿来运行同时也生成了.exe文件下载后双击直接运行即可。版本1使用谷歌运行过程中差的包通过pip下载即可。importosimportreimportasynciofrompathlibimportPathfromplaywright.async_apiimportasync_playwright# GUI 相关importtkinterastkfromtkinterimportfiledialog,messagebox# 3. 文件命名规则10位学号 姓名# - 支持前面有任意前缀例如PJDS2022443948-张三.htmlZRDS2023444591-李四.html# - 如果你想要“学号-姓名.pdf”把下面 new_filename 那一行改一下即可# 支持前缀的正则前面可以有任意非数字字符然后 10 位数字再“-姓名.html”HTML_NAME_PATTERNre.compile(r\D*(\d{10})-([^.])\.html$,re.IGNORECASE)asyncdefconvert_all(source_folder:str,output_root:str,filename_mode:strstudent): filename_mode: - student: 使用 10 位学号姓名格式学号_姓名.pdf - original: 保留原 html 文件名去掉扩展名 ifnotos.path.exists(source_folder):print(f源路径不存在请检查:{source_folder})return# 确保输出根目录存在Path(output_root).mkdir(parentsTrue,exist_okTrue)total_html0# 找到的 html 总数matched_html0# 文件名匹配“学号姓名”的 html 数converted0# 实际成功转换的数量unmatched_samples[]# 未匹配样例最多展示 5 个方便你检查命名asyncwithasync_playwright()asp:browserawaitp.chromium.launch(headlessTrue)pageawaitbrowser.new_page()src_rootPath(source_folder).resolve()forroot,_,filesinos.walk(source_folder):forfileinfiles:ifnotfile.lower().endswith(.html):continuetotal_html1iffilename_modeoriginal:matched_html1new_filenamef{Path(file).stem}.pdfelse:mHTML_NAME_PATTERN.search(file)ifnotm:# 记录少量未匹配样例方便你看命名有什么特例iflen(unmatched_samples)5:unmatched_samples.append(Path(root,file).name)continuematched_html1sid,namem.group(1),m.group(2)# 如需连字符new_filename f{sid}-{name}.pdfnew_filenamef{sid}_{name}.pdfhtml_pathPath(root,file).resolve()input_urihtml_path.as_uri()# 计算相对“平时作业”的目录结构在 output_root 中镜像创建rel_dirPath(root).resolve().relative_to(src_root)target_dirPath(output_root,rel_dir)target_dir.mkdir(parentsTrue,exist_okTrue)output_pathtarget_dir/new_filenameprint(f处理:{html_path}-{output_path})try:awaitpage.goto(input_uri)awaitpage.pdf(pathstr(output_path.resolve()))converted1exceptExceptionase:print(f转换失败:{file}, 异常:{e})awaitbrowser.close()print(\n 处理完成 )print(f源目录:{src_root})print(f扫描到 html 总数:{total_html})print(f匹配“10位学号-姓名”规则的 html 数:{matched_html})ifunmatched_samples:print(未匹配到学号姓名规则的示例(最多5个))forsinunmatched_samples:print( ,s)print(f成功转换 pdf 数量:{converted})print(f输出根目录:{Path(output_root).resolve()})defrun_gui():简单图形界面选择源文件夹和输出文件夹然后开始转换roottk.Tk()root.title(批量 HTML 转 PDF)root.geometry(600x320)root.resizable(False,False)# 居中窗口root.update_idletasks()w600h320wsroot.winfo_screenwidth()hsroot.winfo_screenheight()xint((ws/2)-(w/2))yint((hs/2)-(h/2))root.geometry(f{w}x{h}{x}{y})source_vartk.StringVar()output_vartk.StringVar(value归档完成_PDF版)filename_mode_vartk.StringVar(valuestudent)status_vartk.StringVar(value请选择源/输出文件夹选择文件命名方式然后点击“开始转换”)defchoose_source():pathfiledialog.askdirectory(title选择包含 HTML 的“平时作业”总目录)ifpath:source_var.set(path)defchoose_output():pathfiledialog.askdirectory(title选择 PDF 输出根目录可新建空文件夹)ifpath:output_var.set(path)defstart_convert():sourcesource_var.get().strip()outputoutput_var.get().strip()ifnotsource:messagebox.showwarning(提示,请先选择源文件夹)returnifnotos.path.exists(source):messagebox.showerror(错误,f源文件夹不存在\n{source})returnifnotoutput:messagebox.showwarning(提示,请先选择或填写输出文件夹)return# 如果输出目录不存在可以提前创建Path(output).mkdir(parentsTrue,exist_okTrue)btn_convert.config(statetk.DISABLED)status_var.set(正在转换请稍候……控制台也会显示详细进度)root.update_idletasks()try:# 直接在按钮回调中运行异步任务期间窗口会短暂停止响应这是正常的asyncio.run(convert_all(source,output,filename_mode_var.get()))messagebox.showinfo(完成,全部转换完成\n详细信息请查看控制台输出。)exceptExceptionase:messagebox.showerror(错误,f转换过程中出现异常\n{e})finally:btn_convert.config(statetk.NORMAL)status_var.set(转换结束可以重新选择文件夹再次运行。)# 布局 padding_x10padding_y8# 源文件夹tk.Label(root,text源文件夹包含 HTML 的总目录).grid(row0,column0,stickyw,padxpadding_x,padypadding_y)tk.Entry(root,textvariablesource_var,width55).grid(row1,column0,padxpadding_x,pady0,stickyw)tk.Button(root,text浏览...,commandchoose_source,width10).grid(row1,column1,padxpadding_x,pady0)# 输出文件夹tk.Label(root,text输出根目录将按原结构保存 PDF).grid(row2,column0,stickyw,padxpadding_x,padypadding_y)tk.Entry(root,textvariableoutput_var,width55).grid(row3,column0,padxpadding_x,pady0,stickyw)tk.Button(root,text浏览...,commandchoose_output,width10).grid(row3,column1,padxpadding_x,pady0)# 文件命名方式tk.Label(root,text文件命名方式).grid(row4,column0,stickyw,padxpadding_x,padypadding_y)radio_frametk.Frame(root)radio_frame.grid(row5,column0,columnspan2,stickyw,padxpadding_x,pady0)tk.Radiobutton(radio_frame,text学号_姓名.pdf需文件名匹配 10位学号-姓名.html,variablefilename_mode_var,valuestudent,).pack(anchorw)tk.Radiobutton(radio_frame,text保持原文件名去除 .html,variablefilename_mode_var,valueoriginal,).pack(anchorw)# 状态栏tk.Label(root,textvariablestatus_var,fgblue).grid(row6,column0,columnspan2,stickyw,padxpadding_x,padypadding_y)# 开始按钮btn_converttk.Button(root,text开始转换,commandstart_convert,width12)btn_convert.grid(row7,column0,columnspan2,padypadding_y)root.mainloop()if__name____main__:# 直接运行脚本时启动 GUIrun_gui()版本2使用edge。importosimportreimportsysimportasyncioimportthreadingfrompathlibimportPathfromplaywright.async_apiimportasync_playwright# GUI 相关importtkinterastkfromtkinterimportfiledialog,messagebox,ttk# 为脚本/打包后的 exe 固定 Playwright 浏览器存放路径程序所在目录下的 playwright-browsersifgetattr(sys,frozen,False):# 打包后的 exeBASE_DIRPath(sys.executable).parentelse:# 直接用脚本运行BASE_DIRPath(__file__).parent PLAYWRIGHT_BROWSER_DIRBASE_DIR/playwright-browsersos.environ.setdefault(PLAYWRIGHT_BROWSERS_PATH,str(PLAYWRIGHT_BROWSER_DIR))# 3. 文件命名规则10位学号 姓名# - 支持前面有任意前缀例如PJDS2022443948-张三.htmlZRDS2023444591-李四.html# - 如果你想要“学号-姓名.pdf”把下面 new_filename 那一行改一下即可# 支持前缀的正则前面可以有任意非数字字符然后 10 位数字再“-姓名.html”HTML_NAME_PATTERNre.compile(r\D*(\d{10})-([^.])\.html$,re.IGNORECASE)asyncdefconvert_all(source_folder:str,output_root:str,filename_mode:strstudent,progress_callbackNone): filename_mode: - student: 使用 10 位学号姓名格式学号_姓名.pdf - original: 保留原 html 文件名去掉扩展名 progress_callback: 进度回调函数接受 (current, total, message) 参数 ifnotos.path.exists(source_folder):error_msgf源路径不存在请检查:{source_folder}print(error_msg)ifprogress_callback:progress_callback(0,0,error_msg)return# 确保输出根目录存在Path(output_root).mkdir(parentsTrue,exist_okTrue)total_html0# 找到的 html 总数matched_html0# 文件名匹配学号姓名的 html 数converted0# 实际成功转换的数量unmatched_samples[]# 未匹配样例最多展示 5 个方便你检查命名ifprogress_callback:progress_callback(0,0,正在启动浏览器请稍候...)asyncwithasync_playwright()asp:# 直接使用本机已安装的 Microsoft EdgeWindows 默认自带避免打包内置浏览器体积过大browserawaitp.chromium.launch(headlessTrue,channelmsedge)pageawaitbrowser.new_page()ifprogress_callback:progress_callback(0,0,浏览器已启动正在扫描文件...)src_rootPath(source_folder).resolve()# 先扫描一遍统计总数html_files[]forroot,_,filesinos.walk(source_folder):forfileinfiles:ifnotfile.lower().endswith(.html):continuetotal_html1html_files.append((root,file))iftotal_html0:ifprogress_callback:progress_callback(0,0,未找到任何 HTML 文件)returnifprogress_callback:progress_callback(0,total_html,f找到{total_html}个 HTML 文件开始转换...)# 开始转换foridx,(root,file)inenumerate(html_files,1):iffilename_modeoriginal:matched_html1new_filenamef{Path(file).stem}.pdfelse:mHTML_NAME_PATTERN.search(file)ifnotm:# 记录少量未匹配样例方便你看命名有什么特例iflen(unmatched_samples)5:unmatched_samples.append(Path(root,file).name)continuematched_html1sid,namem.group(1),m.group(2)# 如需连字符new_filename f{sid}-{name}.pdfnew_filenamef{sid}_{name}.pdfhtml_pathPath(root,file).resolve()input_urihtml_path.as_uri()# 计算相对平时作业的目录结构在 output_root 中镜像创建rel_dirPath(root).resolve().relative_to(src_root)target_dirPath(output_root,rel_dir)target_dir.mkdir(parentsTrue,exist_okTrue)output_pathtarget_dir/new_filenameifprogress_callback:progress_callback(idx,total_html,f正在转换:{file}({idx}/{total_html}))print(f处理:{html_path}-{output_path})try:awaitpage.goto(input_uri)awaitpage.pdf(pathstr(output_path.resolve()))converted1exceptExceptionase:print(f转换失败:{file}, 异常:{e})awaitbrowser.close()print(\n 处理完成 )print(f源目录:{src_root})print(f扫描到 html 总数:{total_html})print(f匹配“10位学号-姓名”规则的 html 数:{matched_html})ifunmatched_samples:print(未匹配到学号姓名规则的示例(最多5个))forsinunmatched_samples:print( ,s)print(f成功转换 pdf 数量:{converted})print(f输出根目录:{Path(output_root).resolve()})defrun_gui():简单图形界面选择源文件夹和输出文件夹然后开始转换roottk.Tk()root.title(批量 HTML 转 PDF)root.geometry(600x380)root.resizable(False,False)# 居中窗口root.update_idletasks()w600h380wsroot.winfo_screenwidth()hsroot.winfo_screenheight()xint((ws/2)-(w/2))yint((hs/2)-(h/2))root.geometry(f{w}x{h}{x}{y})source_vartk.StringVar()output_vartk.StringVar(value归档完成_PDF版)filename_mode_vartk.StringVar(valuestudent)# 修复这里的引号嵌套问题外单引号内部使用双引号status_vartk.StringVar(value请选择源/输出文件夹选择文件命名方式然后点击开始转换)# 进度条相关progress_vartk.DoubleVar()progress_label_vartk.StringVar(value)defchoose_source():pathfiledialog.askdirectory(title选择包含 HTML 的“平时作业”总目录)ifpath:source_var.set(path)defchoose_output():pathfiledialog.askdirectory(title选择 PDF 输出根目录可新建空文件夹)ifpath:output_var.set(path)defupdate_progress(current,total,message):更新进度条和状态在主线程中调用iftotal0:progress_var.set((current/total)*100)progress_label_var.set(f{current}/{total})status_var.set(message)root.update_idletasks()defrun_convert_thread():在后台线程中运行转换任务sourcesource_var.get().strip()outputoutput_var.get().strip()ifnotsource:root.after(0,lambda:messagebox.showwarning(提示,请先选择源文件夹))returnifnotos.path.exists(source):root.after(0,lambda:messagebox.showerror(错误,f源文件夹不存在\n{source}))returnifnotoutput:root.after(0,lambda:messagebox.showwarning(提示,请先选择或填写输出文件夹))return# 如果输出目录不存在可以提前创建Path(output).mkdir(parentsTrue,exist_okTrue)# 禁用按钮root.after(0,lambda:btn_convert.config(statetk.DISABLED))root.after(0,lambda:update_progress(0,0,准备开始转换...))defprogress_callback(current,total,msg):进度回调在主线程中更新UIroot.after(0,lambda:update_progress(current,total,msg))try:# 在新的事件循环中运行异步任务loopasyncio.new_event_loop()asyncio.set_event_loop(loop)loop.run_until_complete(convert_all(source,output,filename_mode_var.get(),progress_callback))loop.close()root.after(0,lambda:messagebox.showinfo(完成,全部转换完成))exceptExceptionase:root.after(0,lambda:messagebox.showerror(错误,f转换过程中出现异常\n{e}))finally:root.after(0,lambda:btn_convert.config(statetk.NORMAL))root.after(0,lambda:status_var.set(转换结束可以重新选择文件夹再次运行。))root.after(0,lambda:progress_var.set(0))root.after(0,lambda:progress_label_var.set())defstart_convert():启动转换在后台线程中运行# 在新线程中运行避免阻塞GUIthreadthreading.Thread(targetrun_convert_thread,daemonTrue)thread.start()# 布局 padding_x10padding_y8# 源文件夹tk.Label(root,text源文件夹包含 HTML 的总目录).grid(row0,column0,stickyw,padxpadding_x,padypadding_y)tk.Entry(root,textvariablesource_var,width55).grid(row1,column0,padxpadding_x,pady0,stickyw)tk.Button(root,text浏览...,commandchoose_source,width10).grid(row1,column1,padxpadding_x,pady0)# 输出文件夹tk.Label(root,text输出根目录将按原结构保存 PDF).grid(row2,column0,stickyw,padxpadding_x,padypadding_y)tk.Entry(root,textvariableoutput_var,width55).grid(row3,column0,padxpadding_x,pady0,stickyw)tk.Button(root,text浏览...,commandchoose_output,width10).grid(row3,column1,padxpadding_x,pady0)# 文件命名方式tk.Label(root,text文件命名方式).grid(row4,column0,stickyw,padxpadding_x,padypadding_y)radio_frametk.Frame(root)radio_frame.grid(row5,column0,columnspan2,stickyw,padxpadding_x,pady0)tk.Radiobutton(radio_frame,text学号_姓名.pdf需文件名匹配 10位学号-姓名.html,variablefilename_mode_var,valuestudent,).pack(anchorw)tk.Radiobutton(radio_frame,text保持原文件名去除 .html,variablefilename_mode_var,valueoriginal,).pack(anchorw)# 进度条progress_frametk.Frame(root)progress_frame.grid(row6,column0,columnspan2,stickyew,padxpadding_x,padypadding_y)progress_frame.columnconfigure(0,weight1)tk.Label(progress_frame,textvariableprogress_label_var,font(Arial,9)).grid(row0,column0,stickyw)progress_barttk.Progressbar(progress_frame,variableprogress_var,maximum100,length580)progress_bar.grid(row1,column0,stickyew,pady(5,0))# 状态栏tk.Label(root,textvariablestatus_var,fgblue,wraplength580,justifyleft).grid(row7,column0,columnspan2,stickyw,padxpadding_x,padypadding_y)# 开始按钮btn_converttk.Button(root,text开始转换,commandstart_convert,width12)btn_convert.grid(row8,column0,columnspan2,padypadding_y)root.mainloop()if__name____main__:# 直接运行脚本时启动 GUIrun_gui()3.程序下载链接百度网盘 提取码: 1234总结1.增加html批量转pdf的程序。2025-12-16
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

一些做淘宝优惠券的网站wordpress后台定制

Linux面部识别终极方案:Howdy完整配置与实战指南 【免费下载链接】howdy 🛡️ Windows Hello™ style facial authentication for Linux 项目地址: https://gitcode.com/gh_mirrors/ho/howdy 想要在Linux系统上体验Windows Hello级别的面部识别认…

张小明 2025/12/31 14:20:50 网站建设

微商怎么做 和淘宝网站一样吗网站的目标客户是

在AI视频生成技术快速发展的2025年,阿里Wan-AI团队推出的万相2.1开源视频生成模型,以140亿参数的强大性能和消费级GPU适配能力,为中小企业和个人创作者带来了前所未有的创作自由。 【免费下载链接】Wan2.1-T2V-14B-Diffusers 项目地址: ht…

张小明 2025/12/31 14:20:17 网站建设

江门手机网站建设连连跨境电商网站开发

终极免费发票生成器:Invoify让发票制作变得简单快速 【免费下载链接】invoify An invoice generator app built using Next.js, Typescript, and Shadcn 项目地址: https://gitcode.com/GitHub_Trending/in/invoify 还在为制作专业发票而烦恼吗?I…

张小明 2026/1/1 16:25:51 网站建设

Wordpress西联南阳seo网站建设费用

PyTorch-CUDA-v2.6镜像中使用TorchData优化数据加载 在现代深度学习训练中,一个常见的尴尬场景是:你花了几万块买了张A100显卡,结果监控一看——GPU利用率不到50%。仔细一查,原来是CPU在解码图片、做数据增强时拖了后腿&#xff0…

张小明 2025/12/31 14:19:10 网站建设

做的很不好的网站福州哪里制作网站

PandasAI数据湖AI查询:开启智能数据分析新纪元 【免费下载链接】pandas-ai 该项目扩展了Pandas库的功能,添加了一些面向机器学习和人工智能的数据处理方法,方便AI工程师利用Pandas进行更高效的数据准备和分析。 项目地址: https://gitcode.…

张小明 2025/12/31 14:18:04 网站建设

个人网站做经营性网app开发

Wan2.2-T2V-A14B能否生成图书馆借阅流程指引视频? 你有没有遇到过这种情况:新生入学,第一次走进图书馆,面对一排排书架和几台冷冰冰的自助机,完全不知道从哪下手?📌 找人问吧,工作人…

张小明 2025/12/31 14:17:32 网站建设