GenBase 序列提交

2025-04-23  本文已影响0人  徒唤奈何_c5f0

一 个人信息填写

genbase网址 ->https://ngdc.cncb.ac.cn/genbase/submit/

整体步骤
前面三部分自行填写即可,很简单。

二 序列信息填写

fasta序列格式要求

把fasta格式整理成如上格式,先做了一个序列名和物种的对应表,把gb文件按照物种名改名,然后修改物种信息。需要注意的是,一开始让gpt写脚本改物种,它把所有的序列改成了一个物种,后面检查才发现。

#
#修改前:
#>Terniopsis_yongtaiensis3 Terniopsis yongtaiensis voucher P56 plastid, complete genome
#修改后:
#>Seq1 [organism=Terniopsis yongtaiensis] [isolate=voucher_P58] [Terniopsis_yongtaiensis4]
#
--------------------------------------------------------------------------------------------------
import re

input_file = "53fasta.fasta"         # 输入文件
output_file = "53.edited.fasta"      # 输出文件

with open(input_file, "r") as infile, open(output_file, "w") as outfile:
    seq_count = 1
    for line in infile:
        if line.startswith(">"):
            original_name = line[1:].strip().split()[0]  # 提取原始ID(如 lcl|xxx)

            # 提取 voucher 编号
            match = re.search(r"voucher\s+([A-Za-z0-9_]+)", line)
            isolate = f"voucher_{match.group(1)}" if match else "voucher_UNKNOWN"

            # 提取物种名(匹配两个单词,并去除末尾数字)
            species_match = re.search(r"([A-Z][a-z]+_[a-z]+)(\d*)", line)
            organism = species_match.group(1).replace("_", " ") if species_match else "Unknown_species"

            # 构造新的 header
            new_header = f">Seq{seq_count} [organism={organism}] [isolate={isolate}] [{original_name}]\n"
            outfile.write(new_header)
            seq_count += 1
        else:
            outfile.write(line)


三 元信息填写

前面两步没什么好说的,保持一致就好


表格内容

表格内容填写前三列和第13列就行,序列类型和前面保持一致。

四 上传注释信息

特征填写

本来我想传gff的,后来试了试报错不显示,于是改成tbl上传了。tbl可以用CPSTOOLS的功能生成。

cpstools convert -d gb文件夹 -m tbl
#然后按照seq1~n的方式重新命名各tbl,需要用之前步骤的名字-seq对照表,如下。
#找gbt帮忙写脚本改名,改完以后cat到一起上传即可。
head name_mapping.txt -n 1
Seq1    genus_species 
-------------------------------
import os

# 配置文件路径
mapping_file = "name_mapping.txt"  # 替换为你的映射文件路径
tbl_folder = "tbl"     # 包含原始tbl文件的文件夹
output_folder = "modified_tbls"  # 输出修改后的tbl文件

# 创建输出文件夹(如果不存在)
os.makedirs(output_folder, exist_ok=True)

# 读取映射信息
mapping = {}
with open(mapping_file, "r") as f:
    for line in f:
        if line.strip():
            seq_id, filename_base = line.strip().split("\t")
            mapping[filename_base] = seq_id

# 遍历映射字典,修改tbl文件第一行
for filename_base, seq_id in mapping.items():
    input_path = os.path.join(tbl_folder, f"{filename_base}.tbl")
    output_path = os.path.join(output_folder, f"{filename_base}.tbl")

    if not os.path.exists(input_path):
        print(f"❌ 找不到文件: {input_path}")
        continue

    with open(input_path, "r") as infile:
        lines = infile.readlines()

    # 替换第一行
    if lines and lines[0].startswith(">Feature"):
        lines[0] = f">Feature {seq_id}\n"
    else:
        print(f"⚠️ 文件 {input_path} 第一行不是预期格式,跳过。")
        continue

    # 写入输出文件
    with open(output_path, "w") as outfile:
        outfile.writelines(lines)

    print(f"✅ 已处理文件: {input_path} -> {output_path}")

最后一步不报错的话,上传就搞定了。过程也不难不复杂,写在这给自己长长记性。

上传后报错:
1.序列步骤,如果拓扑结构为环状,应为完整的叶绿体序列,如果是不完整应为线性的。请针对报错Circular topology without complete flag核对。
2.isolate等信息需要填在在元信息步骤的isolate列,才可以正常显示。
修改:
1 在fasta描述行最后加入cloroplast,complete genome
2 在元信息中填写isolate列,本来选填的懒得填,最后还是要写

上一篇 下一篇

猜你喜欢

热点阅读