需求分析
HMDB(Human Metabolome Database)离线数据库提供了完整的代谢物数据,但官方数据文件采用 XML 格式存储,不适合直接进行人工查看和分析。
本项目目标是将 HMDB All Metabolites 全量 XML 数据转换为 CSV 文件,并按照需求保留指定字段,生成结构清晰、便于查询的数据表格。
输入文件为 HMDB 官方离线 XML 数据:
C:\Users\Administrator\Documents\HMDB离线数据库\hmdb_metabolites\hmdb_metabolites.xml
输出文件为:
hmdb_output.csv
最终 CSV 文件固定包含以下字段:
由于全量数据库数据量较大,转换过程需要考虑运行效率和内存占用问题。
实现思路
1. 项目结构
项目主要包含两个脚本:
hmdb_xml_to_csv.py
split_csv.py
其中:
- •
hmdb_xml_to_csv.py 负责 XML 数据转换。 - •
split_csv.py 负责对生成后的 CSV 文件进行拆分。
整体流程:
HMDB XML 文件
↓
XML 数据读取
↓
字段提取与整理
↓
CSV 文件生成
↓
大文件拆分
↓
最终数据表格
2. XML 数据转换
主程序负责读取 HMDB XML 文件,并完成以下工作:
代码框架如下:
import csv
import xml.etree.ElementTree as ET
SOURCE_XML = "hmdb_metabolites.xml"
OUTPUT_CSV = "hmdb_output.csv"
def read_xml(xml_path):
"""
读取 XML 数据
具体解析逻辑隐藏
"""
pass
def extract_data(record):
"""
提取指定字段
具体字段映射逻辑隐藏
"""
pass
def export_csv(rows, output_path):
"""
写入 CSV 文件
"""
pass
def main():
records = read_xml(SOURCE_XML)
rows = []
for record in records:
rows.append(
extract_data(record)
)
export_csv(rows, OUTPUT_CSV)
if __name__ == "__main__":
main()
3. 字段处理
程序根据 HMDB XML 数据结构建立字段映射关系。
处理规则:
其中 Synonyms 等多值字段需要特殊处理,保证完整内容不会被拆分。
4. CSV 输出
导出的 CSV 文件保持固定表头顺序:
FIELDS = [
"Metabolite ID",
"Common Name",
"KEGG Compound ID",
"Kingdom",
"Super Class",
"Class",
"Sub Class",
"Direct Parent",
"Chemical Formula",
"Synonyms",
"Description",
]
输出过程中:
5. 文件拆分
由于全量数据较大,提供 CSV 拆分工具。
运行方式:
python split_csv.py \
--input hmdb_output.csv \
--out-dir ./hmdb_split \
--parts 10
拆分工具支持:
通过拆分降低单个文件大小,提高数据查看效率。
部分代码示例
CSV 拆分工具框架:
import csv
import argparse
def split_file(input_file, output_dir, parts):
"""
根据指定数量拆分 CSV 文件
具体拆分逻辑隐藏
"""
pass
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--input")
parser.add_argument("--out-dir")
parser.add_argument("--parts")
args = parser.parse_args()
split_file(
args.input,
args.out_dir,
args.parts
)
if __name__ == "__main__":
main()
以上代码仅展示项目结构和调用方式,核心数据解析、字段映射及处理逻辑不公开。