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列,本来选填的懒得填,最后还是要写