什麼是分散式鎖 當多個進程在同一個系統中,用分散式鎖控制多個進程對資源的訪問 分散式鎖應用場景 傳統的單體應用單機部署情況下,可以使用java併發處理相關的API進行互斥控制。 分散式系統後由於多線程,多進程分佈在不同機器上,使單機部署情況下的併發控制鎖策略失效,為瞭解決跨JVM互斥機制來控制共用資 ...
原理:利用xml.etree.ElementTree對html進行解析和寫入
import xml.etree.ElementTree as ET # 解析html、xml def circle(): print('輸入again回到程式開始處,輸入exit退出程式') tree = ET.parse('book.html') # 解析文件 root = tree.getroot() # 獲取根節點 link_div = root.find('div[@id="link"]') # 獲取link區的div節點。註意find和findall只能查找直接子元素 body_div = root.find('div[@id="body"]') # 獲取body區的div節點 h1List = link_div.findall('div') count1 = 1 for i in h1List: # 列出所有h1標題 print(str(count1) + '、' + i.find('h1').find('a').text) count1 += 1 def create_h1(): # 創造h1節點 h1_text = input('輸入章節名:') if h1_text == 'again': circle() elif h1_text == 'exit': print('program terminated!') else: h1_link_div = ET.Element('div') # 創造節點 h1_link_h1 = ET.Element('h1') h1_link_a = ET.Element('a') h1_link_a.text = h1_text h1_link_a.set('href', f'#{len(h1List) + 1}') # 設置a節點的屬性 h1_link_h1.append(h1_link_a) # 懸掛節點 h1_link_div.append(h1_link_h1) link_div.append(h1_link_div) # 寫入link區 h1_body_div = ET.Element('div') # 創造節點 h1_body_h1 = ET.Element('h1') h1_body_h1.text = h1_text h1_body_div.set('id', f'{len(h1List) + 1}') h1_body_div.append(h1_body_h1) body_div.append(h1_body_div) # 寫入body區 newTree = ET.ElementTree(root) # root為修改後的root newTree.write('book.xml', encoding='utf-8') # 重新寫入xml,進行更新。需要聲明編碼,否則寫入後會亂碼 circle() def create_h2(): # 創造h2節點 h2_text = input('輸入章節名:') if h2_text == 'again': circle() elif h2_text == 'exit': print('program terminated!') else: h2_link_div = ET.Element('div') h2_link_h2 = ET.Element('h2') h2_link_a = ET.Element('a') h2_link_a.text = h2_text h2_link_a.set('href', f'#{len(h1List)}_{len(h2List) + 1}') h2_link_h2.append(h2_link_a) h2_link_div.append(h2_link_h2) h1List[int(a) - 1].append(h2_link_div) h2_body_div = ET.Element('div') h2_body_h2 = ET.Element('h2') h2_body_h2.text = h2_text h2_body_div.set('id', f'{len(h1List)}_{len(h2List) + 1}') h2_body_div.append(h2_body_h2) body_div.findall('div')[int(a) - 1].append(h2_body_div) newTree = ET.ElementTree(root) newTree.write('book.xml', encoding='utf-8') circle() def create_statement(): # 創造h2下的內容 p_text = input('輸入內容:') if p_text == 'again': circle() elif p_text == 'exit': print('program terminated!') else: p = ET.Element('p') p.text = p_text h2.append(p) newTree = ET.ElementTree(root) newTree.write('book.xml', encoding='utf-8') create_statement() print('在此處創建輸入0\n選擇章節輸入序號') a = input('輸入:') # 輸入的為字元串而非數字 if a == '0': create_h1() else: h2List = link_div.findall('div')[int(a) - 1].findall('div') count2 = 1 for i in h2List: # 列出所有h2標題 print(str(count2) + '、' + i.find('h2').find('a').text) count2 += 1 print('在此處創建輸入0\n選擇章節輸入序號') b = input('輸入:') if b == '0': create_h2() else: h2 = body_div.findall('div')[int(a) - 1].findall('div')[int(b) - 1] # 選擇的h2節點 pList = h2.findall('p') # 列出所有h2標題下的內容 for i in pList: print(i.text) create_statement() tree = ET.ElementTree(root) # root為修改後的root tree.write('book.html', encoding='utf-8') # 重新寫入xml,進行更新。需要聲明編碼,否則寫入後會亂碼 circle() # 迴圈往複
註意千萬要仔細檢查,本人就是因為某個變數打錯字了,沒有發現,耽擱了很久……總之現在是順利地解決了