Python實(shí)現(xiàn)目錄自動(dòng)清洗
一、需求分析
1. 這是一個(gè)標(biāo)準(zhǔn)的章節(jié)目錄,我們需要保留目錄的前兩級(jí)標(biāo)題,也就是包含章和節(jié)字的標(biāo)題
2. 需要在二級(jí)標(biāo)題所在行最前面空4個(gè)格子,一級(jí)標(biāo)題不用
3. 需要在章和節(jié)字的后面加上一個(gè)空格
4. 需要在頁碼前面加上=>符號(hào)
5. 示例效果如下:
二、操作步驟詳解(標(biāo)準(zhǔn)章節(jié))
1. 提取文章目錄
1. 圖片識(shí)別文字提取文章目錄
2. 使用方法
3. 識(shí)別示例
2. 更改保存目錄.txt
你可以使用Python中的open
函數(shù)來打開文件,read
方法讀取文件內(nèi)容,然后對(duì)內(nèi)容進(jìn)行修改,最后使用write
方法將修改后的內(nèi)容寫回文件。以下是一個(gè)簡(jiǎn)單的例子:
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)容(這里只是一個(gè)簡(jiǎn)單的例子) modified_content = content.replace('章', '章666') # 將修改后的內(nèi)容寫回文件 with open(file_path, 'w', encoding='utf-8') as file: file.write(modified_content)
請(qǐng)確保你有足夠的權(quán)限讀取和寫入文件。此外,這只是一個(gè)簡(jiǎn)單的例子,如果需要進(jìn)行更復(fù)雜的操作,可以使用正則表達(dá)式或其他處理方式來實(shí)現(xiàn)。
3. 二級(jí)標(biāo)題前面加4個(gè)空格
# 去除空格 line = line.replace(" ", "") if '節(jié)' in line: # 二級(jí)標(biāo)題添加4個(gè)空格 line = ' ' * 4 + line
lstrip(' ') 是 Python 字符串方法,用于刪除字符串開頭(左側(cè))的指定字符。在這里,' ' 表示空格字符。
4. 在章字和節(jié)字后面添加一個(gè)空格
# 使用正則表達(dá)式在'章'或'節(jié)'后面添加一個(gè)空格 line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line)
5. 在頁碼前面加上=>符號(hào)
# 匹配并去除最外層的英文括號(hào) pattern_en = r'\(([\d\s]+)\)' line = re.sub(pattern_en, r'\1', line) # 匹配并去除最外層的中文括號(hào)及其內(nèi)部?jī)?nèi)容(包括空格) pattern = r'(([^)]+))' line = re.sub(pattern, r'\1', line) line = line.replace(" ", "") # 確保每行只有一個(gè) => 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(" ", "") # 匹配并去除最外層的英文括號(hào) pattern_en = r'\(([\d\s]+)\)' line = re.sub(pattern_en, r'\1', line) # 匹配并去除最外層的中文括號(hào)及其內(nèi)部?jī)?nèi)容(包括除數(shù)字和空格以外的字符) pattern = r'(([^)]+))' line = re.sub(pattern, r'\1', line) # 確保每行只有一個(gè) => if '=>' not in line: # 在每行數(shù)字前加上 => line = re.sub(r'(\d+)', r'=>\1', line) # 使用正則表達(dá)式在'章'或'節(jié)'后面添加一個(gè)空格 line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line) if '節(jié)' in line: # 二級(jí)標(biāo)題添加4個(gè)空格 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ù)二級(jí)標(biāo)題)
1. 二級(jí)標(biāo)題前面加4個(gè)空格
如果章字不在行內(nèi),則初步認(rèn)定他為二級(jí)標(biāo)題
# 去除空格 line = line.replace(" ", "") if '章' not in line: # 二級(jí)標(biāo)題添加4個(gè)空格 line = ' ' * 4 + line
2. 在標(biāo)題里面添加一個(gè)空格
# 使用正則表達(dá)式在'章'或'節(jié)'后面添加一個(gè)空格,僅在后面沒有空格的情況下 line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line) # 在小數(shù)點(diǎn)后添加空格 line = re.sub(r'(\.\d)', r'\1 ', line)
3. 在頁碼前面加上=>符號(hào)
# 匹配并去除最外層的英文括號(hào) pattern_en = r'\(([\d\s]+)\)' line = re.sub(pattern_en, r'\1', line) # 匹配并去除最外層的中文括號(hào)及其內(nèi)部?jī)?nèi)容(包括除數(shù)字和空格以外的字符) pattern = r'(([^)]+))' line = re.sub(pattern, r'\1', line) # 確保每行只有一個(gè) => if '=>' not in line: # 在頁碼數(shù)字前添加 =>(只在行尾) line = re.sub(r'(\d+)$', r'=>\1', line)
4. 去除=>符號(hào)和漢字之間的冗余符號(hào)
# 去除中文漢字和'=>整體符號(hào)左邊的冗余符號(hào) 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é)'后面添加一個(gè)空格,僅在后面沒有空格的情況下 line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line) # 在小數(shù)點(diǎn)后添加空格 line = re.sub(r'(\.\d)', r'\1 ', line) if '章' not in line: # 二級(jí)標(biāo)題添加4個(gè)空格 line = ' ' * 4 + line # 匹配并去除最外層的英文括號(hào) pattern_en = r'\(([\d\s]+)\)' line = re.sub(pattern_en, r'\1', line) # 匹配并去除最外層的中文括號(hào)及其內(nèi)部?jī)?nèi)容(包括除數(shù)字和空格以外的字符) pattern = r'(([^)]+))' line = re.sub(pattern, r'\1', line) # 確保每行只有一個(gè) => 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. 章和章之間識(shí)別為第二級(jí)目錄
3. 只在標(biāo)題末尾頁碼數(shù)字添加=>符號(hào)
4. 去除箭頭和漢字之間識(shí)別出來的冗余符號(hào)
5. 去除空行
拓展與補(bǔ)充
content = file.read() 與 lines = file.readlines() 讀取文件的區(qū)別
在 Python 中,file.read()
和 file.readlines()
兩者可以在同一個(gè)文件句柄中使用,但是要注意的是,file.read()
會(huì)讀取整個(gè)文件內(nèi)容為一個(gè)字符串,而 file.readlines()
會(huì)讀取整個(gè)文件內(nèi)容并將每一行作為一個(gè)字符串放入列表中
如果你使用了 file.read()
,那么之后再使用 file.readlines()
將不會(huì)得到任何內(nèi)容,因?yàn)槲募羔樢呀?jīng)在文件的末尾。如果需要再次讀取文件,你可以使用 file.seek(0)
將文件指針重新定位到文件的開頭
以下是一個(gè)演示的例子:
# 使用 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)
總的來說,兩者是可以在同一個(gè)文件句柄中使用的,只是需要注意文件指針的位置。
以上就是Python實(shí)現(xiàn)目錄自動(dòng)清洗的詳細(xì)內(nèi)容,更多關(guān)于Python目錄清洗的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何使用?Python?Timedelta?月份計(jì)算日期
在本篇文章中,我們將通過?timedelta?學(xué)習(xí)如何在?Python?中使用日期時(shí)間,?我們將了解如何計(jì)算當(dāng)前日期或任何其他日期六個(gè)月后的日期,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2023-10-10python實(shí)現(xiàn)問號(hào)表達(dá)式(?)的方法
這篇文章主要介紹了python實(shí)現(xiàn)問號(hào)(?)表達(dá)式的方法,大家參考使用吧2013-11-11用python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了用python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07python函數(shù)局部變量、全局變量、遞歸知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了關(guān)于python函數(shù)局部變量、全局變量、遞歸知識(shí)點(diǎn),有興趣的朋友們學(xué)習(xí)參考下。2019-11-11在VS2017中用C#調(diào)用python腳本的實(shí)現(xiàn)
這篇文章主要介紹了在VS2017中用C#調(diào)用python腳本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07tensorflow 用矩陣運(yùn)算替換for循環(huán) 用tf.tile而不寫for的方法
今天小編就為大家分享一篇tensorflow 用矩陣運(yùn)算替換for循環(huán) 用tf.tile而不寫for的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07如何在Python中將字符串轉(zhuǎn)換為數(shù)組詳解
最近在用Python,做一個(gè)小腳本,有個(gè)操作就是要把內(nèi)容換成數(shù)組對(duì)象再進(jìn)行相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于如何在Python中將字符串轉(zhuǎn)換為數(shù)組的相關(guān)資料,需要的朋友可以參考下2022-12-12python基于TCP實(shí)現(xiàn)的文件下載器功能案例
這篇文章主要介紹了python基于TCP實(shí)現(xiàn)的文件下載器功能,結(jié)合具體實(shí)例形式分析了Python使用socket模塊實(shí)現(xiàn)的tcp協(xié)議下載功能客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下2019-12-12