代码
cat 04.qujian.py
import pandas as pd
# === 读取 GFF 文件 ===
gff_file = 'Tgra.chr.gff' # 替换为你的文件路径
gff = pd.read_csv(gff_file, sep='\t', header=None, comment='#')
# === 设置列名 ===
gff.columns = ['seqname', 'source', 'feature', 'start', 'end', 'score', 'strand', 'phase', 'attributes']
# === 提取所有基因条目 ===
all_genes = gff[gff['feature'] == 'gene'].copy()
# === 提取 gene_id ===
all_genes['gene_id'] = all_genes['attributes'].str.extract(r'ID=([^;]+)')
# === 设置目标区间和染色体 ===
target_chr = 'Chr5'
start_pos = 296500001
end_pos = 1254100000
# === 提取 Chr4 区间内的基因 ===
in_region = all_genes[
(all_genes['seqname'] == target_chr) &
(all_genes['start'] <= end_pos) &
(all_genes['end'] >= start_pos)
]
# === 提取不在区间内的所有基因(包括 Chr4 以外的)===
out_region = all_genes[~all_genes.index.isin(in_region.index)]
# === 保存结果 ===
in_region[['gene_id']].to_csv('genes_in_region.csv', index=False)
out_region[['gene_id']].to_csv('genes_outside_region.csv', index=False)
# === 打印统计信息 ===
print("✅ 筛选完成!")
print(f"- 区间内基因数:{len(in_region)}(保存至 genes_in_region.csv)")
print(f"- 区间外 + 其他染色体基因数:{len(out_region)}(保存至 genes_outside_region.csv)")
应用
如果你想提取其他染色体上的区间,只需要修改注释文件的路径和染色体号及区间大小,如下图所示:
【金山文档 | WPS云文档】 根据注释文件将5号染色体上在296500001-1254100000区间内的基因ID提取出来