Julia根据基因ID查找其目标序列

生信里经常会遇到需要根据某个/些个基因的ID,来查找目标序列的需求,这里自己搞个例子尝试下:

  1. 基因ID文件
julia> less("ID.txt")
Gene1
Gene2
  1. 所有基因的序列文件
julia> less("AllGene.fa")
>Gene1
ATTGGGGGGGG
ATTTGG
ATGGG
>Gene2
AGGGGGG
AGGGC
TTGT
>Gene3
AAAGGGGGGCCC
TTTGGG

根据之前Julia尝试将基因序列多行的fasta文件转为一行的经验和热心大佬们的建议,写了如下函数,还是希望各位大佬不吝赐教,提前感谢!

"输入:基因ID文件,所有基因ID的Fasta文件。结果:返回目标基因的序列fa文件" 
function GeneID2Fa(GeneIDFile::AbstractString, AllFaFile::AbstractString)
	path_split = splitpath(abspath(GeneIDFile))
	path_split[end] = "$(path_split[end]).fasta"
	ResFile = joinpath(path_split...)
	
	io = open(ResFile,"w")
	Seq = Dict{AbstractString,AbstractString}()
	GeneName = ""
	open(AllFaFile) do Fafile
		for Fa in eachline(Fafile)
			if(startswith(Fa,">"))
				GeneName = chomp(replace(Fa,">"=>""))
				Seq[GeneName] = ""
			else
				Seq[GeneName] *= chomp(Fa)
			end
		end
	end
	open(GeneIDFile) do IdFile
		for id in eachline(IdFile)
			if(!isempty(Seq[id]))
				write(io,">"*id*"\n")
				write(io,Seq[id]*"\n")
			end
		end
	end
	close(io)
end
julia> methods(GeneID2Fa)
# 1 method for generic function "GeneID2Fa":
[1] GeneID2Fa(GeneIDFile::AbstractString, AllFaFile::AbstractString; ResFile) in Main at REPL[123]:1

help?> GeneID2Fa
search: GeneID2Fa

  输入:基因ID文件,所有基因ID的Fasta文件。结果:返回目标基因的序列fa文件

julia> GeneID2Fa("ID.txt","AllGene.fa")

julia> less("ID.txt.fasta")
>Gene1
ATTGGGGGGGGATTTGGATGGG
>Gene2
AGGGGGGAGGGCTTGT

能不能简化一下你的需求,用简洁的语言介绍一遍,个人太菜,有点看不懂

具体可以看我上面列出的示例文件

根据某个/些个基因的ID,来查找目标序列的需求

nesteiner 问的可能是您的问题需求

写的还可以,
建议把 ResFile 作为参数(并提供默认值);这命名方式真的很难受

抱歉没理解他意思,我的问题需求就是希望大佬们指点下不足之处。

感谢建议~ :joy:之前一个大佬也是说我命名方式不规范,可能受其他语言影响吧(还是自己太菜)…

你的需求是输入"Gene1", 返回"ATTGGGGGGGGATTTGGATGGG"吗?

如果是这样的话, 你已经将基因文件读到Dict里了, 直接用基因ID作为key取值不就可以了吗?
建议把函数拆分一下, 将文件读取到Dict, 从读取的Dict中根据基因ID获取序列以及将Dict以标准格式保存到文件分别实现成一个函数, 这样方便复用.

是的。

确实可以单独把基因文件读取成Dict写成一个函数,然后后面的提取ID再写成个函数。