Python實現(xiàn)目錄自動清洗
一、需求分析

1. 這是一個標準的章節(jié)目錄,我們需要保留目錄的前兩級標題,也就是包含章和節(jié)字的標題
2. 需要在二級標題所在行最前面空4個格子,一級標題不用
3. 需要在章和節(jié)字的后面加上一個空格
4. 需要在頁碼前面加上=>符號
5. 示例效果如下:

二、操作步驟詳解(標準章節(jié))
1. 提取文章目錄
1. 圖片識別文字提取文章目錄
2. 使用方法

3. 識別示例

2. 更改保存目錄.txt
你可以使用Python中的open函數(shù)來打開文件,read方法讀取文件內(nèi)容,然后對內(nèi)容進行修改,最后使用write方法將修改后的內(nèi)容寫回文件。以下是一個簡單的例子:
import os
# 獲取桌面路徑
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# 目標文件路徑
file_path = os.path.join(desktop_path, "目錄.txt")
# 打開文件并讀取內(nèi)容
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
# 修改內(nèi)容(這里只是一個簡單的例子)
modified_content = content.replace('章', '章666')
# 將修改后的內(nèi)容寫回文件
with open(file_path, 'w', encoding='utf-8') as file:
file.write(modified_content)

請確保你有足夠的權(quán)限讀取和寫入文件。此外,這只是一個簡單的例子,如果需要進行更復雜的操作,可以使用正則表達式或其他處理方式來實現(xiàn)。
3. 二級標題前面加4個空格
# 去除空格
line = line.replace(" ", "")
if '節(jié)' in line:
# 二級標題添加4個空格
line = ' ' * 4 + line
lstrip(' ') 是 Python 字符串方法,用于刪除字符串開頭(左側(cè))的指定字符。在這里,' ' 表示空格字符。
4. 在章字和節(jié)字后面添加一個空格
# 使用正則表達式在'章'或'節(jié)'后面添加一個空格
line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line)
5. 在頁碼前面加上=>符號
# 匹配并去除最外層的英文括號
pattern_en = r'\(([\d\s]+)\)'
line = re.sub(pattern_en, r'\1', line)
# 匹配并去除最外層的中文括號及其內(nèi)部內(nèi)容(包括空格)
pattern = r'(([^)]+))'
line = re.sub(pattern, r'\1', line)
line = line.replace(" ", "")
# 確保每行只有一個 =>
if '=>' not in line:
# 在每行數(shù)字前加上 =>
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")
# 打開文件并讀取內(nèi)容
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)
# 匹配并去除最外層的中文括號及其內(nèi)部內(nèi)容(包括除數(shù)字和空格以外的字符)
pattern = r'(([^)]+))'
line = re.sub(pattern, r'\1', line)
# 確保每行只有一個 =>
if '=>' not in line:
# 在每行數(shù)字前加上 =>
line = re.sub(r'(\d+)', r'=>\1', line)
# 使用正則表達式在'章'或'節(jié)'后面添加一個空格
line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line)
if '節(jié)' in line:
# 二級標題添加4個空格
line = ' ' * 4 + line
modified_lines.append(line)
# 將修改后的內(nèi)容寫回文件
with open(file_path, 'w', encoding='utf-8') as file:
file.writelines(modified_lines)
# 讀取文件內(nèi)容
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
print(content)三、進階一(有章無節(jié)+小數(shù)二級標題)

1. 二級標題前面加4個空格
如果章字不在行內(nèi),則初步認定他為二級標題
# 去除空格
line = line.replace(" ", "")
if '章' not in line:
# 二級標題添加4個空格
line = ' ' * 4 + line
2. 在標題里面添加一個空格
# 使用正則表達式在'章'或'節(jié)'后面添加一個空格,僅在后面沒有空格的情況下
line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line)
# 在小數(shù)點后添加空格
line = re.sub(r'(\.\d)', r'\1 ', line)
3. 在頁碼前面加上=>符號
# 匹配并去除最外層的英文括號
pattern_en = r'\(([\d\s]+)\)'
line = re.sub(pattern_en, r'\1', line)
# 匹配并去除最外層的中文括號及其內(nèi)部內(nèi)容(包括除數(shù)字和空格以外的字符)
pattern = r'(([^)]+))'
line = re.sub(pattern, r'\1', line)
# 確保每行只有一個 =>
if '=>' not in line:
# 在頁碼數(shù)字前添加 =>(只在行尾)
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")
# 打開文件并讀取內(nèi)容
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
modified_lines = []
for line in lines:
# 去除空格
line = line.replace(" ", "")
# 使用正則表達式在'章'或'節(jié)'后面添加一個空格,僅在后面沒有空格的情況下
line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line)
# 在小數(shù)點后添加空格
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)
# 匹配并去除最外層的中文括號及其內(nèi)部內(nèi)容(包括除數(shù)字和空格以外的字符)
pattern = r'(([^)]+))'
line = re.sub(pattern, r'\1', line)
# 確保每行只有一個 =>
if '=>' not in line:
# 在頁碼數(shù)字前添加 =>(只在行尾)
line = re.sub(r'(\d+)$', r'=>\1', line)
modified_lines.append(line)
# 將修改后的內(nèi)容寫回文件
with open(file_path, 'w', encoding='utf-8') as file:
file.writelines(modified_lines)
# 讀取文件內(nèi)容
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
print(content)7. 進階說明
1. 兼容標準章節(jié)版本
2. 章和章之間識別為第二級目錄
3. 只在標題末尾頁碼數(shù)字添加=>符號
4. 去除箭頭和漢字之間識別出來的冗余符號
5. 去除空行
拓展與補充
content = file.read() 與 lines = file.readlines() 讀取文件的區(qū)別
在 Python 中,file.read() 和 file.readlines() 兩者可以在同一個文件句柄中使用,但是要注意的是,file.read() 會讀取整個文件內(nèi)容為一個字符串,而 file.readlines() 會讀取整個文件內(nèi)容并將每一行作為一個字符串放入列表中
如果你使用了 file.read(),那么之后再使用 file.readlines() 將不會得到任何內(nèi)容,因為文件指針已經(jīng)在文件的末尾。如果需要再次讀取文件,你可以使用 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實現(xiàn)目錄自動清洗的詳細內(nèi)容,更多關(guān)于Python目錄清洗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ndarray數(shù)組的轉(zhuǎn)置(transpose)和軸對換方式
這篇文章主要介紹了ndarray數(shù)組的轉(zhuǎn)置(transpose)和軸對換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Python?十大經(jīng)典排序算法實現(xiàn)詳解
排序算法是《數(shù)據(jù)結(jié)構(gòu)與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存2022-01-01
pytorch實現(xiàn)梯度下降和反向傳播圖文詳細講解
這篇文章主要介紹了pytorch實現(xiàn)梯度下降和反向傳播,反向傳播的目的是計算成本函數(shù)C對網(wǎng)絡(luò)中任意w或b的偏導數(shù)。一旦我們有了這些偏導數(shù),我們將通過一些常數(shù)α的乘積和該數(shù)量相對于成本函數(shù)的偏導數(shù)來更新網(wǎng)絡(luò)中的權(quán)重和偏差2023-04-04
Python 合并多個TXT文件并統(tǒng)計詞頻的實現(xiàn)
這篇文章主要介紹了Python 合并多個TXT文件并統(tǒng)計詞頻的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
pandas的連接函數(shù)concat()函數(shù)的具體使用方法
這篇文章主要介紹了pandas的連接函數(shù)concat()函數(shù)的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
使用python進行PostgreSQL數(shù)據(jù)庫連接全過程
這篇文章主要介紹了使用python進行PostgreSQL數(shù)據(jù)庫連接的相關(guān)資料,包括安裝psycopg2模塊、使用PyCharm進行圖形化連接、代碼連接數(shù)據(jù)庫的方法、以及如何執(zhí)行DML和DQL操作,需要的朋友可以參考下2025-03-03

