Python實現(xiàn)目錄自動清洗
一、需求分析
1. 這是一個標(biāo)準(zhǔn)的章節(jié)目錄,我們需要保留目錄的前兩級標(biāo)題,也就是包含章和節(jié)字的標(biāo)題
2. 需要在二級標(biāo)題所在行最前面空4個格子,一級標(biāo)題不用
3. 需要在章和節(jié)字的后面加上一個空格
4. 需要在頁碼前面加上=>符號
5. 示例效果如下:
二、操作步驟詳解(標(biāo)準(zhǔn)章節(jié))
1. 提取文章目錄
1. 圖片識別文字提取文章目錄
2. 使用方法
3. 識別示例
2. 更改保存目錄.txt
你可以使用Python中的open
函數(shù)來打開文件,read
方法讀取文件內(nèi)容,然后對內(nèi)容進(jìn)行修改,最后使用write
方法將修改后的內(nèi)容寫回文件。以下是一個簡單的例子:
import os # 獲取桌面路徑 desktop_path = os.path.join(os.path.expanduser("~"), "Desktop") # 目標(biāo)文件路徑 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)限讀取和寫入文件。此外,這只是一個簡單的例子,如果需要進(jìn)行更復(fù)雜的操作,可以使用正則表達(dá)式或其他處理方式來實現(xiàn)。
3. 二級標(biāo)題前面加4個空格
# 去除空格 line = line.replace(" ", "") if '節(jié)' in line: # 二級標(biāo)題添加4個空格 line = ' ' * 4 + line
lstrip(' ') 是 Python 字符串方法,用于刪除字符串開頭(左側(cè))的指定字符。在這里,' ' 表示空格字符。
4. 在章字和節(jié)字后面添加一個空格
# 使用正則表達(dá)式在'章'或'節(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") # 目標(biāo)文件路徑 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) # 使用正則表達(dá)式在'章'或'節(jié)'后面添加一個空格 line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line) if '節(jié)' in line: # 二級標(biāo)題添加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)
三、進(jìn)階一(有章無節(jié)+小數(shù)二級標(biāo)題)
1. 二級標(biāo)題前面加4個空格
如果章字不在行內(nèi),則初步認(rèn)定他為二級標(biāo)題
# 去除空格 line = line.replace(" ", "") if '章' not in line: # 二級標(biāo)題添加4個空格 line = ' ' * 4 + line
2. 在標(biāo)題里面添加一個空格
# 使用正則表達(dá)式在'章'或'節(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") # 目標(biāo)文件路徑 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(" ", "") # 使用正則表達(dá)式在'章'或'節(jié)'后面添加一個空格,僅在后面沒有空格的情況下 line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line) # 在小數(shù)點后添加空格 line = re.sub(r'(\.\d)', r'\1 ', line) if '章' not in line: # 二級標(biāo)題添加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. 進(jìn)階說明
1. 兼容標(biāo)準(zhǔn)章節(jié)版本
2. 章和章之間識別為第二級目錄
3. 只在標(biāo)題末尾頁碼數(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)目錄自動清洗的詳細(xì)內(nèi)容,更多關(guān)于Python目錄清洗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用python實現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了用python實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07python函數(shù)局部變量、全局變量、遞歸知識點總結(jié)
在本篇文章里小編給大家整理了關(guān)于python函數(shù)局部變量、全局變量、遞歸知識點,有興趣的朋友們學(xué)習(xí)參考下。2019-11-11在VS2017中用C#調(diào)用python腳本的實現(xiàn)
這篇文章主要介紹了在VS2017中用C#調(diào)用python腳本的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07tensorflow 用矩陣運算替換for循環(huán) 用tf.tile而不寫for的方法
今天小編就為大家分享一篇tensorflow 用矩陣運算替換for循環(huán) 用tf.tile而不寫for的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07如何在Python中將字符串轉(zhuǎn)換為數(shù)組詳解
最近在用Python,做一個小腳本,有個操作就是要把內(nèi)容換成數(shù)組對象再進(jìn)行相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于如何在Python中將字符串轉(zhuǎn)換為數(shù)組的相關(guān)資料,需要的朋友可以參考下2022-12-12