Files
Aislo/resources/tester/scratch/sync_round4_flaws_to_master.py
T

168 lines
9.3 KiB
Python

import re, os, sys
sys.stdout.reconfigure(encoding='utf-8')
master_path = 'resources/knowledge/original/원가계산/건설공사_표준품셈/2026년_건설공사_표준품셈.md'
with open(master_path, encoding='utf-8') as f:
master_text = f.read()
# 1. 13-11-2 and 13-11-3 in Plant
plant_path = 'resources/knowledge/original/원가계산/건설공사_표준품셈/04_기계설비부문/제13장_플랜트설비공사.md'
with open(plant_path, encoding='utf-8') as f:
plant_text = f.read()
# Extract 13-11-2 to 13-11-3 section from plant_text
# from "13-11-2 Cooling Tower 설치(기당)" to " - 3. 직종별 제관수리품(ton당)"
m_plant = re.search(r'(13-11-2 Cooling Tower 설치\(기당\).*?)( - 3\. 직종별 제관수리품\(ton당\))', plant_text, re.DOTALL)
if m_plant:
plant_13_11_repl = m_plant.group(1)
# Replace in master
pattern_master_13_11 = r'13-11-2 Cooling Tower 설치\(기당\).*?(?= - 3\. 직종별 제관수리품\(ton당\))'
if re.search(pattern_master_13_11, master_text, re.DOTALL):
master_text = re.sub(pattern_master_13_11, plant_13_11_repl, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 13-11-2 and 13-11-3 to master")
else:
print("FAILED to find 13-11-2 in master")
else:
print("FAILED to extract 13-11-2 from plant_text")
# 2. 13-8-1 in Plant
m_13_8_1 = re.search(r'(\[주\] ① 본 품은 급진기, 소각로모듈.*?)(13-8-2 폐열보일러 설치)', plant_text, re.DOTALL)
if m_13_8_1:
repl_13_8_1 = m_13_8_1.group(1)
pattern_master_13_8_1 = r'\[주\] ① 본 품은 급진기, 소각로모듈.*?(?=13-8-2 폐열보일러 설치)'
if re.search(pattern_master_13_8_1, master_text, re.DOTALL):
master_text = re.sub(pattern_master_13_8_1, repl_13_8_1, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 13-8-1 to master")
else:
print("FAILED to find 13-8-1 in master")
# 3. 13-8-4 and 13-8-5 in Plant
m_13_8_4 = re.search(r'(\| ◦ 소운반 - 작업 위치까지 필요한 자재를 운반.*?)(→\s+\| 작 업 구 분 \| 직 종 \| 단 위 \| 수 량 \|)', plant_text, re.DOTALL)
if m_13_8_4:
repl_13_8_4 = m_13_8_4.group(1) + m_13_8_4.group(2)
pattern_master_13_8_4 = r'\| ◦ 소운반 \| 특 별 인 부 \| 인/ton \| 0\.62 \|.*?→(?:기계설비부문838)?\s+\| 작 업 구 분 \| 직 종 \| 단 위 \| 수 량 \|'
if re.search(pattern_master_13_8_4, master_text, re.DOTALL):
master_text = re.sub(pattern_master_13_8_4, repl_13_8_4, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 13-8-4 to master")
else:
print("FAILED to find 13-8-4 in master")
m_13_8_5 = re.search(r'(\| ◦ 소운반 - 작업위치까지 필요한 자재를 운반.*?)(→\s+\| 작 업 구 분 \| 직 종 \| 단 위 \| 수 량 \|)', plant_text, re.DOTALL)
if m_13_8_5:
repl_13_8_5 = m_13_8_5.group(1) + m_13_8_5.group(2)
pattern_master_13_8_5 = r'\| ◦ 소운반 \| 특 별 인 부 \| 인/ton \| 0\.66 \|.*?→(?:제13장 플랜트설비공사839)?\s+\| 작 업 구 분 \| 직 종 \| 단 위 \| 수 량 \|'
if re.search(pattern_master_13_8_5, master_text, re.DOTALL):
master_text = re.sub(pattern_master_13_8_5, repl_13_8_5, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 13-8-5 to master")
else:
print("FAILED to find 13-8-5 in master")
# 4. Tunnel 3-2-1
tunnel_path = 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제3장_터널공사.md'
with open(tunnel_path, encoding='utf-8') as f:
tunnel_text = f.read()
m_tunnel = re.search(r'(3-2 터널굴착\s+3-2-1 터널굴착 1발파당 싸이클 시간\(Cycle Time\).*?)( - ⑤ A, B, C군의)', tunnel_text, re.DOTALL)
if m_tunnel:
repl_tunnel = m_tunnel.group(1)
pattern_master_tunnel = r'(?:3-2 터널굴착)?3-2-1 터널굴착 1발파당 싸이클 시간\(Cycle Time\).*?(?= - ⑤ A, B, C군의)'
if re.search(pattern_master_tunnel, master_text, re.DOTALL):
master_text = re.sub(pattern_master_tunnel, repl_tunnel, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 3-2-1 tunnel cycle time to master")
else:
print("FAILED to find 3-2-1 in master")
# 5. Survey 9-3-1 Lidar
survey_path = 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제9장_측량.md'
with open(survey_path, encoding='utf-8') as f:
survey_text = f.read()
m_survey = re.search(r'(- 2\. 지상라이다를 이용하여 측량하는 경우.*?)(?=\[주\] ① 본 품은 평지 10만㎡)', survey_text, re.DOTALL)
if m_survey:
repl_survey = m_survey.group(1)
pattern_master_survey = r'- 2\. 지상라이다를 이용하여 측량하는 경우.*?(?=\[주\] ① 본 품은 평지 10만㎡)'
if re.search(pattern_master_survey, master_text, re.DOTALL):
master_text = re.sub(pattern_master_survey, repl_survey, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 9-3-1 lidar survey to master")
else:
print("FAILED to find 9-3-1 lidar in master")
# 6. Road Paving 1-9-2
road_path = 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제1장_도로포장공사.md'
with open(road_path, encoding='utf-8') as f:
road_text = f.read()
m_road = re.search(r'(1-9-2 보차도 및 도로경계블록 설치\(.*?\).*?)(?=\[주\] ① 본 품은 화강암 및 콘크리트 경계블록)', road_text, re.DOTALL)
if m_road:
repl_road = m_road.group(1)
pattern_master_road = r'1-9-2 보차도 및 도로경계블록 설치\(.*?\).*?(?=\[주\] ① 본 품은 화강암 및 콘크리트 경계블록)'
if re.search(pattern_master_road, master_text, re.DOTALL):
master_text = re.sub(pattern_master_road, repl_road, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 1-9-2 road border block to master")
else:
print("FAILED to find 1-9-2 in master")
# 7. Maint Civil: 2-1-18, 2-1-19
maint_path = 'resources/knowledge/original/원가계산/건설공사_표준품셈/05_유지관리부문/제2장_토목.md'
with open(maint_path, encoding='utf-8') as f:
maint_text = f.read()
m_maint_2_1 = re.search(r'(\| 배치인원 \(인\) \| \| \| 사용기계 \(1대\) \|.*?)(?=\[주\] ① 본 품은 현장재활용 포장의)', maint_text, re.DOTALL)
if m_maint_2_1:
repl_maint_2_1 = m_maint_2_1.group(1)
pattern_master_maint_2_1 = r'\| 배치인원 \(인\) \| \| \| 사용기계 \(1대\) \|.*?(?=\[주\] ① 본 품은 현장재활용 포장의)'
if re.search(pattern_master_maint_2_1, master_text, re.DOTALL):
master_text = re.sub(pattern_master_maint_2_1, repl_maint_2_1, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 2-1-18 & 2-1-19 to master")
else:
print("FAILED to find 2-1-18 & 2-1-19 in master")
# 8. Maint Civil: 2-4-2, 2-4-3
m_maint_2_4_2 = re.search(r'(2-4-2 하수관 세정\(.*?\).*?)(?=\[주\] ① 본 품은 하수관 내부를)', maint_text, re.DOTALL)
if m_maint_2_4_2:
repl_2_4_2 = m_maint_2_4_2.group(1)
pattern_master_2_4_2 = r'2-4-2 하수관 세정\(.*?\).*?(?=\[주\] ① 본 품은 하수관 내부를)'
if re.search(pattern_master_2_4_2, master_text, re.DOTALL):
master_text = re.sub(pattern_master_2_4_2, repl_2_4_2, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 2-4-2 to master")
else:
print("FAILED to find 2-4-2 in master")
m_maint_2_4_3 = re.search(r'(2-4-3 관세관\(.*?\).*?)(?=\[주\] ① 본 품은 주철관 및 강관에 대한)', maint_text, re.DOTALL)
if m_maint_2_4_3:
repl_2_4_3 = m_maint_2_4_3.group(1)
pattern_master_2_4_3 = r'(?:제2장 토목903)?2-4-3 관세관\(.*?\).*?(?=\[주\] ① 본 품은 주철관 및 강관에 대한)'
if re.search(pattern_master_2_4_3, master_text, re.DOTALL):
master_text = re.sub(pattern_master_2_4_3, repl_2_4_3, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 2-4-3 to master")
else:
print("FAILED to find 2-4-3 in master")
# 9. Maint Civil: 2-4-7, 2-4-8
m_maint_2_4_7 = re.search(r'(2-4-7 하수관 준설\(.*?\).*?)(?=\[주\] ① 본 품은 흡입준설차를 활용한 하수도 수로암거)', maint_text, re.DOTALL)
if m_maint_2_4_7:
repl_2_4_7 = m_maint_2_4_7.group(1)
pattern_master_2_4_7 = r'(?:제2장 토목905)?2-4-7 하수관 준설\(.*?\).*?(?=\[주\] ① 본 품은 흡입준설차를 활용한 하수도 수로암거)'
if re.search(pattern_master_2_4_7, master_text, re.DOTALL):
master_text = re.sub(pattern_master_2_4_7, repl_2_4_7, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 2-4-7 & 2-4-8 to master")
else:
print("FAILED to find 2-4-7 in master")
# 10. Maint Civil: 2-4-10, 2-4-11, 2-4-13, 2-4-14
m_maint_2_4_10 = re.search(r'(2-4-10 빗물받이 준설\(.*?\).*?)$', maint_text, re.DOTALL)
if m_maint_2_4_10:
repl_2_4_10 = m_maint_2_4_10.group(1).strip()
pattern_master_2_4_10 = r'2-4-10 빗물받이 준설\(.*?(?=\n\n# |\Z)'
if re.search(pattern_master_2_4_10, master_text, re.DOTALL):
master_text = re.sub(pattern_master_2_4_10, repl_2_4_10, master_text, count=1, flags=re.DOTALL)
print("Successfully synced 2-4-10 through 2-4-14 to master")
else:
print("FAILED to find 2-4-10 in master")
with open(master_path, 'w', encoding='utf-8') as f:
f.write(master_text)
print("Master file updated successfully!")