如何用Python合并HTML格式油井完井文件并导出为Excel?
问题分析与解决思路
一、修复当前HTML合并代码的问题
你的代码主要存在两个核心问题,导致输出空的HTML结构:
1. 文件路径错误
os.listdir(data_folder)仅返回文件夹内的文件名,而非完整路径。直接用open(file, 'r')会在当前工作目录查找文件,根本找不到目标HTML文件,自然无法读取内容。
2. 编码兼容问题
Windows环境下下载的HTML文件可能带有非UTF-8编码,直接读取容易触发编码错误,导致内容读取失败。
修复后的完整代码
import os from bs4 import BeautifulSoup output_doc = BeautifulSoup() output_doc.append(output_doc.new_tag("html")) output_doc.html.append(output_doc.new_tag("body")) data_folder = r'C:\Users\dtsar\OneDrive\Desktop\another well completion' for file in os.listdir(data_folder): if not file.lower().endswith('.html'): continue # 拼接完整文件路径 + 指定编码避免读取失败 full_file_path = os.path.join(data_folder, file) with open(full_file_path, 'r', encoding='utf-8', errors='ignore') as html_file: soup = BeautifulSoup(html_file.read(), "html.parser") # 确保body有内容再添加,避免空元素干扰 if soup.body and soup.body.contents: output_doc.body.extend(soup.body.contents) print(output_doc.prettify())
二、更高效的Excel合并方案(推荐)
你的最终目标是合并数据并导出Excel,手动拼接HTML再转格式的方式繁琐且容易出错。直接用pandas读取HTML中的表格数据,合并后导出是更简洁的方案:
1. 安装依赖
pip install pandas openpyxl
2. 实现代码
import os import pandas as pd data_folder = r'C:\Users\dtsar\OneDrive\Desktop\another well completion' all_data = [] for file in os.listdir(data_folder): if not file.lower().endswith('.html'): continue full_path = os.path.join(data_folder, file) # 自动读取HTML中的所有表格,返回DataFrame列表 table_list = pd.read_html(full_path, encoding='utf-8') # 假设每个文件只有一个目标表格,取第一个;若有多个,可通过索引/列名筛选 if table_list: all_data.append(table_list[0]) # 合并所有表格数据 combined_data = pd.concat(all_data, ignore_index=True) # 导出到Excel文件 combined_data.to_excel('合并油井完井数据.xlsx', index=False, engine='openpyxl')
如果HTML中存在多个表格,可通过table_list[1](索引值)或检查列名(如df.columns)来定位目标表格。
内容的提问来源于stack exchange,提问作者user21123063
相关产品推荐
相关产品推荐

