Python实现目录自动清洗

 更新时间:2023年11月20日 10:41:12   作者:东离与糖宝  
这篇文章主要为大家详细介绍了Python实现目录自动清洗的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下

一、需求分析

1. 这是一个标准的章节目录,我们需要保留目录的前两级标题,也就是包含章和节字的标题

2. 需要在二级标题所在行最前面空4个格子,一级标题不用

3. 需要在章和节字的后面加上一个空格

4. 需要在页码前面加上=>符号

5. 示例效果如下:

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

1. 提取文章目录

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

http://183.62.34.62:8004/docs

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 re
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:
    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 + 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)

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

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 re
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:
    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. 去除空行

拓展与补充

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)

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

以上就是Python实现目录自动清洗的详细内容,更多关于Python目录清洗的资料请关注脚本之家其它相关文章!

相关文章

  • OpenCV 光流Optical Flow示例

    OpenCV 光流Optical Flow示例

    这篇文章主要为大家介绍了OpenCV 光流Optical Flow示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 如何使用 Python Timedelta 月份计算日期

    如何使用 Python Timedelta 月份计算日期

    在本篇文章中,我们将通过 timedelta 学习如何在 Python 中使用日期时间, 我们将了解如何计算当前日期或任何其他日期六个月后的日期,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • python实现问号表达式(?)的方法

    python实现问号表达式(?)的方法

    这篇文章主要介绍了python实现问号(?)表达式的方法,大家参考使用吧
    2013-11-11
  • 用python实现学生信息管理系统

    用python实现学生信息管理系统

    这篇文章主要为大家详细介绍了用python实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • python函数局部变量、全局变量、递归知识点总结

    python函数局部变量、全局变量、递归知识点总结

    在本篇文章里小编给大家整理了关于python函数局部变量、全局变量、递归知识点,有兴趣的朋友们学习参考下。
    2019-11-11
  • 在VS2017中用C#调用python脚本的实现

    在VS2017中用C#调用python脚本的实现

    这篇文章主要介绍了在VS2017中用C#调用python脚本的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python中六大超时处理方法介绍

    Python中六大超时处理方法介绍

    在 Python 中,超时处理是一项非常常见的需求,尤其是在处理阻塞任务或并发任务时,本文整理了大家常用的六大超时处理方法,感兴趣的小伙伴可以参考下
    2025-01-01
  • tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法

    tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法

    今天小编就为大家分享一篇tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 如何在Python中将字符串转换为数组详解

    如何在Python中将字符串转换为数组详解

    最近在用Python,做一个小脚本,有个操作就是要把内容换成数组对象再进行相关操作,下面这篇文章主要给大家介绍了关于如何在Python中将字符串转换为数组的相关资料,需要的朋友可以参考下
    2022-12-12
  • python基于TCP实现的文件下载器功能案例

    python基于TCP实现的文件下载器功能案例

    这篇文章主要介绍了python基于TCP实现的文件下载器功能,结合具体实例形式分析了Python使用socket模块实现的tcp协议下载功能客户端与服务器端相关操作技巧,需要的朋友可以参考下
    2019-12-12

最新评论