编辑RNA-seq组装的FASTA序列:保留指定标识并添加Uniprot ID
解决方案
1. 解决FASTA文件无法用Get-Content打开的问题
Get-Content打不开通常是编码不兼容导致,尝试指定编码读取:
Get-Content -Path "你的FASTA文件路径.fasta" -Encoding UTF8
如果仍失败,替换为-Encoding Default或-Encoding ASCII重试。若还是不行,用Notepad++打开文件(它能自动识别多数编码),将文件转存为UTF-8格式后再操作。
2. 调整序列头格式(保留第一个ENSP+GN前缀的倒数第二个标识)
用Notepad++的正则替换功能完成,无需编程基础:
- 打开Notepad++并导入FASTA文件
- 按
Ctrl+H打开替换窗口,选择「正则表达式」模式,勾选「匹配新行」 - 「查找目标」输入:
^>(.*?)(ENSP[\d.]+).*?([^|]+)\|[^|]+$ - 「替换为」输入:
>$2|GN=$3 - 点击「全部替换」,即可得到目标格式(如
>ENSP00000493376.2|GN=OR4F5-201)
3. 为序列添加Uniprot ID
方法一:手动映射(适合新手)
- 提取所有ENSP编号:在Notepad++中用正则查找
^>ENSP([\d.]+),将捕获的ENSP复制出来保存为每行一个的文本文件 - 通过Uniprot ID映射功能,将Ensembl Protein(ENSP)映射到UniProtKB,下载CSV格式的映射结果
- 用Excel整理ENSP与对应Uniprot ID的对应关系
- 回到Notepad++,通过批量替换将Uniprot ID追加到序列头,例如将
>ENSPxxxx|GN=yyyy替换为>ENSPxxxx|GN=yyyy|UP=zzzz
方法二:PowerShell脚本自动映射(双击运行)
新建文本文件,复制以下代码并保存为AddUniprotID.ps1,替换其中的文件路径后右键选择「用PowerShell运行」:
# 替换为你的FASTA文件路径 $fastaPath = "你的文件路径.fasta" $outputPath = "处理后的文件.fasta" # 读取FASTA文件 $fasta = Get-Content $fastaPath -Encoding UTF8 # 存储ENSP到Uniprot的映射 $mapping = @{} # 提取所有ENSP编号 $ensps = $fasta | Where-Object { $_ -match "^>(ENSP[\d.]+)" } | ForEach-Object { $matches[1] } # 调用Uniprot API批量映射 $enspsStr = $ensps -join "," $apiUrl = "https://rest.uniprot.org/idmapping/run" $body = @{ from = "ENSEMBL_PRO_ID" to = "UniProtKB" ids = $enspsStr } | ConvertTo-Json $response = Invoke-RestMethod -Uri $apiUrl -Method Post -Body $body -ContentType "application/json" $jobId = $response.jobId # 等待映射完成 Start-Sleep -Seconds 10 $resultUrl = "https://rest.uniprot.org/idmapping/results/$jobId" $result = Invoke-RestMethod -Uri $resultUrl # 构建映射表 foreach ($entry in $result.results) { $mapping[$entry.from] = $entry.to.primaryAccession } # 处理序列头并保存结果 $processed = $fasta | ForEach-Object { if ($_ -match "^>(ENSP[\d.]+)\|GN=([^|]+)$") { $ensp = $matches[1] $gn = $matches[2] $up = $mapping[$ensp] ?? "Unknown" ">$ensp|GN=$gn|UP=$up" } else { $_ } } $processed | Out-File $outputPath -Encoding UTF8 Write-Host "处理完成,结果保存到 $outputPath"
注意事项
- 若FASTA文件过大(超100MB),Notepad++可能卡顿,优先使用PowerShell脚本
- Uniprot API有请求限制,ENSP数量过多时需分批次处理
内容的提问来源于stack exchange,提问作者Ulrike Resch
相关产品推荐
相关产品推荐

