为了从 CSV 数据生成类似于您提供的 BioSample 示例的 XML 文件,我们将首先检查 CSV 文件的结构以了解其包含的数据类型。然后,我们将创建一个脚本来读取这些数据并将其格式化为特定的 XML 结构。
步骤:
1. 检查 CSV 文件:确定 CSV 文件中的哪些列与 XML 模板中的字段相对应。这对于将 CSV 数据正确映射到 XML 元素至关重要。
2. 编写 Python 脚本:开发一个 Python 脚本,读取 CSV、提取必要信息并根据提供的模板构建 XML。
3. 输出 XML:脚本将为 CSV 中的每一行生成 XML 条目,并可以将它们输出到控制台或将其保存到文件中
让我们首先检查 CSV 文件的前几行,以了解其结构以及如何将其映射到 XML 格式。
列名称和说明:
• 小孢子信息表(描述):样品的描述,可能提供有关生物材料或处理阶段的背景信息。
• Unnamed: 1 (回复原始数据文件名):该列似乎包含与原始数据对应的ID或文件名。
• 未命名:2:未标记,可能需要澄清其内容。
• 未命名:3(英文命名):样本的英文名称,提供可在 XML 中使用的直接标识符。
python代码
import pandas as pd
def generate_xml(csv_file_path, xml_output_path):
# Load the CSV file
try:
metadata = pd.read_csv(csv_file_path, encoding='GB18030')
print("CSV loaded successfully. Columns:", metadata.columns) # Debugging statement
except Exception as e:
print("Failed to load CSV:", e)
return
# Verify data is not empty
if metadata.empty:
print("CSV is empty. No data to process.")
return
# Define the XML template
xml_template = """
<BioSample access="public" id="{id}" accession="{accession}">
<Ids>
<Id db="BioSample" is_primary="1">{accession}</Id>
<Id db_label="Sample name">{sample_name}</Id>
</Ids>
<Description>
<Title>{title}</Title>
<Organism taxonomy_id="58047" taxonomy_name="Torreya grandis">
<OrganismName>Torreya grandis</OrganismName>
</Organism>
</Description>
<Owner>
<Name url="https://www.zafu.edu.cn/">Zhejiang A&F University</Name>
</Owner>
<Models>
<Model>Plant</Model>
</Models>
<Package display_name="Plant; version 1.0">Plant.1.0</Package>
</BioSample>
"""
# Iterate over the rows in the DataFrame to generate XML for each sample
xml_entries = []
for index, row in metadata.iterrows():
print(f"Processing row {index}: {row}") # Debugging statement
xml_instance = xml_template.format(
id=f"BIO{index + 1}",
accession=row['Unnamed: 1'], # Assuming the correct column for accession
sample_name=row['Unnamed: 3'], # Assuming the correct column for sample name
title=row['小孢子信息表'] # Assuming the correct column for title
)
xml_entries.append(xml_instance)
# Combine all XML entries into one document
full_xml = "<BioSampleSet>\n" + "\n".join(xml_entries) + "\n</BioSampleSet>"
# Write the XML to a file
with open(xml_output_path, 'w', encoding='utf-8') as file:
file.write(full_xml)
print("XML written to", xml_output_path) # Debugging statement
# Define the CSV file path and the output XML file path
csv_file_path = 'FPKM-信息表.csv'
xml_output_path = 'biosample_result.xml'
# Generate the XML file
generate_xml(csv_file_path, xml_output_path)
python generate_biosample_xml.py