当前位置: 首页 > news >正文

文档:htm格式转txt

꧂ 两个地方都保存꧁

import os
import codecs
from bs4 import BeautifulSoupdef generate_output_filename(file_path, save_path):# 获取文件名(不包含扩展名)file_name = os.path.splitext(os.path.basename(file_path))[0]# 构造保存路径和文件名output_filename = os.path.join(save_path, file_name + '.txt')return output_filenamedef get_content_from_mht(soup):# 从 MHT 文件中提取内容,并返回字符串形式的内容# 这里只是示例,您可以根据具体的 MHT 文件结构进行修改# 下面的示例代码仅提取 <body> 标签下的文本内容body = soup.bodyif body:return body.get_text()else:return ""def convert_mht_to_txt(path, save_path_1, save_path_2):if os.path.isdir(path):for root, dirs, files in os.walk(path):for file in files:if file.endswith('.mht'):file_path = os.path.join(root, file)output_filename_1 = generate_output_filename(file_path, save_path_1)output_filename_2 = generate_output_filename(file_path, save_path_2)with codecs.open(output_filename_1, 'w', 'utf-8') as f_out_1, \codecs.open(output_filename_2, 'w', 'utf-8') as f_out_2:with open(file_path, 'r', encoding='utf-8') as f_in:soup = BeautifulSoup(f_in, 'html.parser')content = get_content_from_mht(soup)f_out_1.write(content)f_out_2.write(content)elif os.path.isfile(path) and path.endswith('.mht'):output_filename_1 = generate_output_filename(path, save_path_1)output_filename_2 = generate_output_filename(path, save_path_2)with codecs.open(output_filename_1, 'w', 'utf-8') as f_out_1, \codecs.open(output_filename_2, 'w', 'utf-8') as f_out_2:with open(path, 'r', encoding='utf-8') as f_in:soup = BeautifulSoup(f_in, 'html.parser')content = get_content_from_mht(soup)f_out_1.write(content)f_out_2.write(content)# 示例用法
path = input("请输入要处理的文件路径:")
save_path_1 = input("请输入第一个保存文件的位置(按回车默认保存):")
save_path_2 = input("请输入第二个保存文件的位置(按回车默认不保存):")if save_path_1 == '':save_path_1 = '/storage/emulated/0/文件/代码print相关/结构图/字符图/'if save_path_2 == '':convert_mht_to_txt(path, save_path_1, save_path_1)
else:convert_mht_to_txt(path, save_path_1, save_path_2)

仅适用于处理 .mht 格式的文件。

꧂添加转义成文字 ꧁

如果您想要将转义字符转换为相应的文字形式,可以借助 Python 的内置模块 html。以下是修改后的代码:

import os
import codecs
from bs4 import BeautifulSoup
import htmldef generate_output_filename(file_path, save_path):# 获取文件名(不包含扩展名)file_name = os.path.splitext(os.path.basename(file_path))[0]# 构造保存路径和文件名output_filename = os.path.join(save_path, file_name + '.txt')return output_filenamedef get_content_from_mht(soup):# 从 MHT 文件中提取内容,并返回字符串形式的内容# 这里只是示例,您可以根据具体的 MHT 文件结构进行修改# 下面的示例代码仅提取 <body> 标签下的文本内容body = soup.bodyif body:content = body.get_text()# 转义字符转换为相应的文字形式content = html.unescape(content)return contentelse:return ""def convert_mht_to_txt(path, save_path_1, save_path_2):if os.path.isdir(path):for root, dirs, files in os.walk(path):for file in files:if file.endswith('.mht'):file_path = os.path.join(root, file)output_filename_1 = generate_output_filename(file_path, save_path_1)output_filename_2 = generate_output_filename(file_path, save_path_2)with codecs.open(output_filename_1, 'w', 'utf-8') as f_out_1, \codecs.open(output_filename_2, 'w', 'utf-8') as f_out_2:with open(file_path, 'r', encoding='utf-8') as f_in:soup = BeautifulSoup(f_in, 'html.parser')content = get_content_from_mht(soup)f_out_1.write(content)f_out_2.write(content)elif os.path.isfile(path) and path.endswith('.mht'):output_filename_1 = generate_output_filename(path, save_path_1)output_filename_2 = generate_output_filename(path, save_path_2)with codecs.open(output_filename_1, 'w', 'utf-8') as f_out_1, \codecs.open(output_filename_2, 'w', 'utf-8') as f_out_2:with open(path, 'r', encoding='utf-8') as f_in:soup = BeautifulSoup(f_in, 'html.parser')content = get_content_from_mht(soup)f_out_1.write(content)f_out_2.write(content)# 示例用法
path = input("请输入要处理的文件路径:")
save_path_1 = input("请输入第一个保存文件的位置(按回车默认保存):")
save_path_2 = input("请输入第二个保存文件的位置(按回车默认不保存):")if save_path_1 == '':save_path_1 = '/storage/emulated/0/文件/代码print相关/结构图/字符图/'if save_path_2 == '':convert_mht_to_txt(path, save_path_1, save_path_1)
else:convert_mht_to_txt(path, save_path_1, save_path_2)

在这个版本的代码中,使用 html.unescape() 函数将转义字符转换为相应的文字形式。这样在保存为文本文件时,转义字符就会以正常的文本形式显示。

相关文章:

文档:htm格式转txt

꧂ 两个地方都保存꧁ import os import codecs from bs4 import BeautifulSoupdef generate_output_filename(file_path, save_path):# 获取文件名&#xff08;不包含扩展名&#xff09;file_name os.path.splitext(os.path.basename(file_path))[0]# 构造保存路径和文件名ou…...

电子邮件地址注册过程详解

许多人可能对如何注册电子邮件地址感到困惑&#xff0c;本文将详细解析电子邮件地址的注册过程&#xff1a;确定邮箱厂商、创建邮箱账户、设置电子邮件地址。 1、确定要注册的邮箱厂商 首先我们需要确定要注册哪种类型的电子邮件服务。目前市场上有许多不同的电子邮件服务提供商…...

深度学习——卷积神经网络(CNN)基础二

深度学习——卷积神经网络&#xff08;CNN&#xff09;基础二 文章目录 前言三、填充和步幅3.1. 填充3.2. 步幅3.3. 小结 四、多输入多输出通道4.1. 多输入通道4.2. 多输出通道4.3. 11卷积层4.4. 小结 总结 前言 上文对卷积有了初步的认识&#xff0c;其实卷积操作就是通过卷积…...

R语言进度条:txtProgressBar功能使用方法

R语言进度条使用攻略 在数据处理、建模或其他计算密集型任务中&#xff0c;我们常常会执行一些可能需要很长时间的操作。 在这些情况下&#xff0c;展示一个进度条可以帮助我们了解当前任务的进度&#xff0c;以及大约还需要多长时间来完成&#xff0c;R语言提供了几种简单且灵…...

Maven实战-声明周期和插件

Maven实战-声明周期和插件 Maven 设计了插件机制&#xff0c;每个构建步骤都可以绑定一个或者多个插件行为&#xff0c;而且 Maven 为大多数构建步骤编写 并绑定了默认插件。例如&#xff0c;针对编译的插件有 maven-compiler-plugin&#xff0c;针对测试的插件有 maven-sure…...

ebpf的快速开发工具--libbpf-bootstrap

基于ubuntu22.04-深入浅出 eBPF 基于ebpf的性能工具-bpftrace 基于ebpf的性能工具-bpftrace脚本语法 基于ebpf的性能工具-bpftrace实战(内存泄漏) 什么是libbpf-bootstrap libbpf-bootstrap是一个开源项目&#xff0c;旨在帮助开发者快速启动和开发使用eBPF(Extended Berk…...

万界星空科技/生产制造执行MES系统/开源MES/免费MES

开源系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、免费数字化大屏。 万界星空开源MES制造执行系统的Java开源版本。开源mes…...

螺纹快速接头在卫浴行业中的应用提高产量降低生产成本

螺纹快速接头在卫浴行业主要用于上下水测试和密封性测试&#xff0c;可以快速密封连接待测产品和水管。取代之前的工人手拧编织管六角螺母的方式&#xff0c;方便快捷&#xff0c;密封性好&#xff0c;产品测试更稳定。 卫浴行业产品必须具备很好的密封性&#xff0c;防止在实际…...

通达OA 2016网络智能办公系统 handle.php SQL注入漏洞

一、漏洞描述 北京通达信科科技有限公司通达OA2016网络智能办公系统 handle.php 存在sql注入漏洞&#xff0c;攻击者可利用此漏洞获取数据库管理员权限&#xff0c;查询数据、获取系统信息&#xff0c;威胁企业单位数据安全。 二、网络空间搜索引擎查询 fofa查询 app"T…...

parameter的各种用法以及localparam的用法

parameter的各种用法以及localparam的用法 一、这种写法放在v文件或者是用来调用其他的ram文件都是正确的。 一、这种写法放在v文件或者是用来调用其他的ram文件都是正确的。 module para_local();parameter a 10; // 第一种用法 parameter a 4d10; // 第二种用法 para…...

网络社区挖掘-图论部分的基本知识笔记

1 网络社区挖掘定义 网络社区挖掘是指利用数据挖掘技术和机器学习算法&#xff0c;分析社交网络、在线社区或互联网上的各种交互数据&#xff0c;以揭示其中隐藏的模式、关系和信息。这些社区可以是社交媒体平台、在线论坛、博客、微博等&#xff0c;人们在这些平台上进行交流…...

Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式

目录 一、Vue Router 1.1、下载 1.2、基本使用 a&#xff09;引入 vue-router.js&#xff08;注意&#xff1a;要在 Vue.js 之后引入&#xff09;. b&#xff09;创建好路由规则 c&#xff09;注册到 Vue 实例中 d&#xff09;展示路由组件 1.3、切换路由的两种方式 1.…...

mysql为什么会选错索引,以及优化器是如何选择索引的

一&#xff1a;概念 在 索引建立之后&#xff0c;一条语句可能会命中多个索引&#xff0c;这时&#xff0c;索引的选择&#xff0c;就会交由 优化器 来选择合适的索引。 优化器选择索引的目的&#xff0c;是找到一个最优的执行方案&#xff0c;并用最小的代价去执行语句。 二…...

vue基础知识十七:你知道vue中key的原理吗?说说你对它的理解

一、Key是什么 开始之前&#xff0c;我们先还原两个实际工作场景 1.当我们在使用v-for时&#xff0c;需要给单元加上key <ul><li v-for"item in items" :key"item.id">...</li> </ul>2.用new Date()生成的时间戳作为key&#x…...

攻防演练蓝队|Windows应急响应入侵排查

文章目录 日志分析web日志windows系统日志 文件排查进程排查新增、隐藏账号排查启动项/服务/计划任务排查工具 日志分析 web日志 dirpro扫描目录&#xff0c;sqlmap扫描dvwa Python dirpro -u http://192.168.52.129 -b sqlmap -u "http://192.168.52.129/dvwa/vulnera…...

uniapp 小程序实现图片宽度100%、高度自适应的效果

因为image组件默认是有宽度跟高度的&#xff0c;所以这个高度不怎么好写 通过load事件来控制图片的高度 话不多说&#xff0c;直接上代码&#xff0c; <image class"img" src"/static/image.png" :style"{ height: imgHeight px }"mode&q…...

05. NXP官方SDK使用实验

05. NXP官方SDK使用实验 官方SDK移植 官方SDK移植 新建cc.h文件 SDK包里面会用到很多数据类型&#xff0c;所以需要在该文件中定义一些常用的数据类型 #pragma once #define __I volatile #define __O volatile #define __IO volatiletypedef sig…...

Python- JSON使用初探

JSON 在JSON格式中&#xff0c;{} 和 [] 是两种主要的数据结构&#xff0c;分别表示对象&#xff08;或称为字典、哈希、map&#xff09;和数组&#xff08;或称为列表、序列&#xff09;。 {} - 对象 在JSON中&#xff0c;对象是一组"key": value对的集合。这些键必…...

vim的配置文件

用户级别配置文件 ~/.vimrc 修改用户级别的配置文件只会影响当前用户, 不会影响其他的用户. 例如: 在用户的家目录下的.vimrc文件中添加 set tabstop4 ----设置缩进4个空格 set nu ----设置行号 set shiftwidth4 —设置ggG缩进4个空格, 默认是缩进8个空格 系统级别配置文件 /e…...

[python] pytest

在写一个项目前, 可以先编写测试模块 测试模块中包含了一个个最小的功能 当每一个功能都完善正确时 再将这些功能转换成项目运行的功能 多个项目运行的功能就组成了一个模块 多个模块就组成了一个项目服务 pytest 是一个 Python 测试框架&#xff0c;它提供了简单易用的语…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…...

【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战

🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架&#xff0c;开发Windows桌面应用&#xff0c;把一个html页面作为GUI设计放到Saucer里&#xff0c;隐藏掉运行时弹…...

大模型智能体核心技术:CoT与ReAct深度解析

**导读&#xff1a;**在当今AI技术快速发展的背景下&#xff0c;大模型的推理能力和可解释性成为业界关注的焦点。本文深入解析了两项核心技术&#xff1a;CoT&#xff08;思维链&#xff09;和ReAct&#xff08;推理与行动&#xff09;&#xff0c;这两种方法正在重新定义大模…...

鸿蒙APP测试实战:从HDC命令到专项测试

普通APP的测试与鸿蒙APP的测试有一些共同的特征&#xff0c;但是也有一些区别&#xff0c;其中共同特征是&#xff0c;它们都可以通过cmd的命令提示符工具来进行app的性能测试。 其中区别主要是&#xff0c;对于稳定性测试的命令的区别&#xff0c;性能指标获取方式的命令的区…...

Unity基础-Mathf相关

Unity基础-Mathf相关 一、Mathf数学工具 概述 Mathf是Unity中封装好用于数学计算的工具结构体&#xff0c;提供了丰富的数学计算方法&#xff0c;特别适用于游戏开发场景。它是Unity开发中最常用的数学工具之一&#xff0c;能够帮助我们处理各种数学计算和插值运算。 Mathf…...