By chenyi, 30 June, 2025
Forums

为了从 CSV 数据生成类似于您提供的 BioSample 示例的 XML 文件,我们将首先检查 CSV 文件的结构以了解其包含的数据类型。然后,我们将创建一个脚本来读取这些数据并将其格式化为特定的 XML 结构。

步骤:
1. 检查 CSV 文件:确定 CSV 文件中的哪些列与 XML 模板中的字段相对应。这对于将 CSV 数据正确映射到 XML 元素至关重要。
2. 编写 Python 脚本:开发一个 Python 脚本,读取 CSV、提取必要信息并根据提供的模板构建 XML。
3. 输出 XML:脚本将为 CSV 中的每一行生成 XML 条目,并可以将它们输出到控制台或将其保存到文件中

让我们首先检查 CSV 文件的前几行,以了解其结构以及如何将其映射到 XML 格式。
f110343a0e9838f2acd44dbea605f365.png

列名称和说明:
• 小孢子信息表(描述):样品的描述,可能提供有关生物材料或处理阶段的背景信息。
• 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