目录自动清洗

文章目录

  • 前言
  • 一、需求分析
  • 二、操作步骤详解(标准章节)
    • 1. 提取文章目录
    • 2. 更改保存目录.txt
    • 3. 二级标题前面加4个空格
    • 4. 在章字和节字后面添加一个空格
    • 5. 在页码前面加上=>符号
    • 6. 代码完全体
  • 三、进阶一(有章无节+小数二级标题)
    • 1. 二级标题前面加4个空格
    • 2. 在标题里面添加一个空格
    • 3. 在页码前面加上=>符号
    • 4. 去除=>符号和汉字之间的冗余符号
    • 5. 删除空行
    • 6. 代码完全体
    • 7. 进阶说明
  • 拓展与补充
    • 1. content = file.read() 与 lines = file.readlines() 读取文件的区别
  • 总结

前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

一、需求分析

在这里插入图片描述

1. 这是一个标准的章节目录,我们需要保留目录的前两级标题,也就是包含章和节字的标题
2. 需要在二级标题所在行最前面空4个格子,一级标题不用
3. 需要在章和节字的后面加上一个空格
4. 需要在页码前面加上=>符号
5. 示例效果如下:

在这里插入图片描述

二、操作步骤详解(标准章节)

1. 提取文章目录

1. 图片识别文字提取文章目录

http://183.62.34.62:8004/docs#/defaul/text_detection_text_system_analysis_menus__post

2. 使用方法

在这里插入图片描述

3. 识别示例

在这里插入图片描述

2. 更改保存目录.txt

你可以使用Python中的open函数来打开文件,read方法读取文件内容,然后对内容进行修改,最后使用write方法将修改后的内容写回文件。以下是一个简单的例子:

import os
# 获取桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")# 目标文件路径
file_path = os.path.join(desktop_path, "目录.txt")# 打开文件并读取内容
with open(file_path, 'r', encoding='utf-8') as file:content = file.read()# 修改内容(这里只是一个简单的例子)
modified_content = content.replace('章', '章666')# 将修改后的内容写回文件
with open(file_path, 'w', encoding='utf-8') as file:file.write(modified_content)

在这里插入图片描述

请确保你有足够的权限读取和写入文件。此外,这只是一个简单的例子,如果需要进行更复杂的操作,可以使用正则表达式或其他处理方式来实现。

3. 二级标题前面加4个空格

    # 去除空格line = line.replace(" ", "")if '节' in line:# 二级标题添加4个空格line = ' ' * 4 + line

在这里插入图片描述
lstrip(' ') 是 Python 字符串方法,用于删除字符串开头(左侧)的指定字符。在这里,' ' 表示空格字符。

4. 在章字和节字后面添加一个空格

    # 使用正则表达式在'章'或'节'后面添加一个空格line = re.sub(r'(章|节)(?![ ])', r'\1 ', line)

在这里插入图片描述

5. 在页码前面加上=>符号

    # 匹配并去除最外层的英文括号pattern_en = r'\(([\d\s]+)\)'line = re.sub(pattern_en, r'\1', line)# 匹配并去除最外层的中文括号及其内部内容(包括空格)pattern = r'(([^)]+))'line = re.sub(pattern, r'\1', line)line = line.replace(" ", "")# 确保每行只有一个 =>if '=>' not in line:# 在每行数字前加上 =>line = re.sub(r'(\d+)', r'=>\1', line)

在这里插入图片描述

6. 代码完全体

# 获取桌面路径
import os
import redesktop_path = os.path.join(os.path.expanduser("~"), "Desktop")# 目标文件路径
file_path = os.path.join(desktop_path, "目录.txt")# 打开文件并读取内容
with open(file_path, 'r', encoding='utf-8') as file:lines = file.readlines()modified_lines = []
for line in lines:# 去除空格line = line.replace(" ", "")# 匹配并去除最外层的英文括号pattern_en = r'\(([\d\s]+)\)'line = re.sub(pattern_en, r'\1', line)# 匹配并去除最外层的中文括号及其内部内容(包括除数字和空格以外的字符)pattern = r'(([^)]+))'line = re.sub(pattern, r'\1', line)# 确保每行只有一个 =>if '=>' not in line:# 在每行数字前加上 =>line = re.sub(r'(\d+)', r'=>\1', line)# 使用正则表达式在'章'或'节'后面添加一个空格line = re.sub(r'(章|节)(?![ ])', r'\1 ', line)if '节' in line:# 二级标题添加4个空格line = ' ' * 4 + linemodified_lines.append(line)
# 将修改后的内容写回文件
with open(file_path, 'w', encoding='utf-8') as file:file.writelines(modified_lines)# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as file:content = file.read()print(content)

三、进阶一(有章无节+小数二级标题)

在这里插入图片描述

1. 二级标题前面加4个空格

如果章字不在行内,则初步认定他为二级标题

     # 去除空格line = line.replace(" ", "")if '章' not in line:# 二级标题添加4个空格line = ' ' * 4 + line

在这里插入图片描述

2. 在标题里面添加一个空格

    # 使用正则表达式在'章'或'节'后面添加一个空格,仅在后面没有空格的情况下line = re.sub(r'(章|节)(?![ ])', r'\1 ', line)# 在小数点后添加空格line = re.sub(r'(\.\d)', r'\1 ', line)

在这里插入图片描述

3. 在页码前面加上=>符号

    # 匹配并去除最外层的英文括号pattern_en = r'\(([\d\s]+)\)'line = re.sub(pattern_en, r'\1', line)# 匹配并去除最外层的中文括号及其内部内容(包括除数字和空格以外的字符)pattern = r'(([^)]+))'line = re.sub(pattern, r'\1', line)# 确保每行只有一个 =>if '=>' not in line:# 在页码数字前添加 =>(只在行尾)line = re.sub(r'(\d+)$', r'=>\1', line)

在这里插入图片描述

4. 去除=>符号和汉字之间的冗余符号

    # 去除中文汉字和'=>整体符号左边的冗余符号pattern = r'([\u4e00-\u9fff]+)[^\w\s]+=>'line = re.sub(pattern, r'\1=>', line)

在这里插入图片描述

5. 删除空行

    # 去除空格line = line.replace(" ", "")if len(line) == 1:continue

在这里插入图片描述

6. 代码完全体

# 获取桌面路径
import os
import redesktop_path = os.path.join(os.path.expanduser("~"), "Desktop")# 目标文件路径
file_path = os.path.join(desktop_path, "目录.txt")# 打开文件并读取内容
with open(file_path, 'r', encoding='utf-8') as file:lines = file.readlines()modified_lines = []
for line in lines:# 去除空格line = line.replace(" ", "")# 使用正则表达式在'章'或'节'后面添加一个空格,仅在后面没有空格的情况下line = re.sub(r'(章|节)(?![ ])', r'\1 ', line)# 在小数点后添加空格line = re.sub(r'(\.\d)', r'\1 ', line)if '章' not in line:# 二级标题添加4个空格line = ' ' * 4 + line# 匹配并去除最外层的英文括号pattern_en = r'\(([\d\s]+)\)'line = re.sub(pattern_en, r'\1', line)# 匹配并去除最外层的中文括号及其内部内容(包括除数字和空格以外的字符)pattern = r'(([^)]+))'line = re.sub(pattern, r'\1', line)# 确保每行只有一个 =>if '=>' not in line:# 在页码数字前添加 =>(只在行尾)line = re.sub(r'(\d+)$', r'=>\1', line)modified_lines.append(line)
# 将修改后的内容写回文件
with open(file_path, 'w', encoding='utf-8') as file:file.writelines(modified_lines)# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as file:content = file.read()print(content)

7. 进阶说明

1. 兼容标准章节版本

2. 章和章之间识别为第二级目录

3. 只在标题末尾页码数字添加=>符号

4. 去除箭头和汉字之间识别出来的冗余符号

5. 去除空行

拓展与补充

1. content = file.read() 与 lines = file.readlines() 读取文件的区别

在 Python 中,file.read()file.readlines() 两者可以在同一个文件句柄中使用,但是要注意的是,file.read() 会读取整个文件内容为一个字符串,而 file.readlines() 会读取整个文件内容并将每一行作为一个字符串放入列表中

如果你使用了 file.read(),那么之后再使用 file.readlines() 将不会得到任何内容,因为文件指针已经在文件的末尾。如果需要再次读取文件,你可以使用 file.seek(0) 将文件指针重新定位到文件的开头

以下是一个演示的例子:

# 使用 file.read()
with open('example.txt', 'r', encoding='utf-8') as file:content = file.read()print(content)# 使用 file.readlines(),注意在上面使用了 file.read() 之后,需要重新打开文件或者使用 file.seek(0)
with open('example.txt', 'r', encoding='utf-8') as file:file.seek(0)lines = file.readlines()print(lines)

总的来说,两者是可以在同一个文件句柄中使用的,只是需要注意文件指针的位置。

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/191889.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电磁场与电磁波part3--静态电磁场及其边值问题的解

1、当场源(电荷、电流)不随时间变化时,所产生的电场、磁场也不随时间变化,称为静态电磁场。静止电荷产生的静电场、在导电媒质中恒定运动电荷形成的恒定电场以及恒定电流产生的恒定磁场都属于静态电磁场。 2、静电场基本方程微分形…

C语言开发者的利器:gcc编译命令指南

本文主要介绍gcc编译c语言过程,以及常用命令 文章目录 C语言编译过程1. 预处理(Preprocessing):2. 编译(Compiling):3. 汇编(Assembling):4. 链接&#xff08…

栈的实现及OJ练习(c语言)

目录 前言 栈 栈的实现(数组栈) 初始化栈 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空 销毁栈 最终代码: 选择练习 栈的OJ题 前言 我们在之前已经学习了顺序表和链表的概念,它们有这样的优缺点&a…

基于机器学习的居民消费影响因子分析预测

项目视频讲解: 基于机器学习的居民消费影响因子分析预测_哔哩哔哩_bilibili 主要工作内容: 完整代码: import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import missingno as msno import warnings warnings.filterwarnin…

html网页设计 01基础标签

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body> <!-- 标题标签 h1最大 --><h1>最大标签</h1><h2>二级标签</h2><h3>三级标签</h3><…

vuedraggable拖拽列表设置某一条元素禁止被拖拽

直接上代码 <draggable filter".unDrag"><div class"unDrag">不能拖拽</div><div class"canDrag">可以拖拽</div> </draggable>一、设置filter 在draggable节点的属性filter设置不可拖拽的class名&#…

Mac 安装 protobuf 和Android Studio 使用

1. 安装,执行命令 brew install protoc 2. Mac 错误提示&#xff1a;zsh: command not found: brew解决方法 解决方法&#xff1a;mac 安装homebrew&#xff0c; 用以下命令安装&#xff0c;序列号选择中科大&#xff08;1&#xff09;或 阿里云 /bin/zsh -c "$(curl…

openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库

文章目录 openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库126.1 前提条件126.2 背景信息126.3 操作步骤 openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库 126.1 前提条件 系统中需要有审计管理员或者具有审计管理员权…

编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。

编写程序&#xff0c;要求输入x的值&#xff0c;输出y的值。分别用&#xff08;1&#xff09;不嵌套的if语句&#xff08;2&#xff09;嵌套的if语句&#xff08;3&#xff09;if-else语句&#xff08;4&#xff09;switch语句。 选择结构是编程语言中常用的一种控制结构&…

Intellij Idea屏蔽日志/过滤日志

一、安装插件 Grep Console 二、设置关键词&#xff0c;过滤日志 关键词的前后加上 .* 符号&#xff0c;类似&#xff1a; .*关键词.*设置后 &#xff0c;点击 Apply 即可过滤日志。

基于PI+重复控制的并网逆变系统谐波抑制策略模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; PI重复控制简介&#xff1a; 重复控制这一新型控制理论最早于出现日本学术界&#xff0c;其目的是为了用于解决质子加速器跟踪精度的问题。Yamamoto Y 等人提出了重复控制数学基础的内模原理&#xff0c;在控…

阿里AoneFlow分支管理

分支模式 1.TrunkBased模式 工作方式 TrunkBased 模式是持续集成思想所崇尚的工作方式&#xff0c;它由单个主干分支和许多发布分支组成&#xff0c;每个发布分支在特定版本的提交点上从主干创建出来&#xff0c;用来进行上线部署和 Hotfix&#xff08;补丁&#xff09;。 …