python - 使用 Python 删除 FASTA 中的重复序列
问题描述
如果之前有人问过这个问题,我深表歉意,但我已经搜索了好几天,在 Python 中找不到解决方案。
我有一个大的 fasta 文件,包含标题和序列。
>cavPor3_rmsk_tRNA-Leu-TTA(m) range=chrM:2643-2717 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GTTAAGGTGGCAGAGCCGGTAATTGCATAAAATTTAAGACTTTACTCTCA
GAGGTTCAACTCCTCTCCTTAACAC
>cavPor3_rmsk_tRNA-Gln-CAA_ range=chrM:3745-3815 5'pad=0 3'pad=0 strand=- repeatMasking=none
AGAGGGTCATAAAGGTTATGGGGTTGGCTTGAAACCAGCTTTAGGGGGTT
CAATTCCTTCCTCTCT
>cavPor3_rmsk_tRNA-Ser-TCA(m) range=chrM:6875-6940 5'pad=0 3'pad=0 strand=- repeatMasking=none
AGAGGGTCATAAAGGTTATGGGGTTGGCTTGAAACCAGCTTTAGGGGGTT
CAATTCCTTCCTCTCT
这是文件外观的一小部分。我只想保留第一个条目(标题和序列),如果你可以看到最后两个条目,序列是相同的。
输出将如下所示:
>cavPor3_rmsk_tRNA-Leu-TTA(m) range=chrM:2643-2717 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GTTAAGGTGGCAGAGCCGGTAATTGCATAAAATTTAAGACTTTACTCTCA
GAGGTTCAACTCCTCTCCTTAACAC
>cavPor3_rmsk_tRNA-Gln-CAA_ range=chrM:3745-3815 5'pad=0 3'pad=0 strand=- repeatMasking=none
AGAGGGTCATAAAGGTTATGGGGTTGGCTTGAAACCAGCTTTAGGGGGTT
CAATTCCTTCCTCTCT
问题是 FASTA 文件的大小超过了 1 GB。我找到了通过基于重复 ID 删除重复项或使用 bash 来解决此问题的方法,但遗憾的是我无法在我的计算机上执行此操作。此任务是针对研究项目,而不是家庭作业或任务。
预先感谢您的帮助!
解决方案
这是从这里复制的:Remove Redundant Sequences from FASTA file in Python
使用 Biopython,但适用于标题为以下内容的 fasta 文件:
'> header' 类型见FAsta Format Wiki
from Bio import SeqIO
import time
start = time.time()
seen = []
records = []
for record in SeqIO.parse("INPUT-FILE", "fasta"):
if str(record.seq) not in seen:
seen.append(str(record.seq))
records.append(record)
#writing to a fasta file
SeqIO.write(records, "OUTPUT-FILE", "fasta")
end = time.time()
print(f"Run time is {(end- start)/60}")
正如 MattMDo 建议的那样,使用集合而不是列表更快:
seen = set()
records = []
for record in SeqIO.parse("b4r2.fasta", "fasta"):
if record.seq not in seen:
seen.add(record.seq)
records.append(record)
我有一个更长的使用 argparser 但它的速度较慢,因为如果需要计数序列可以发布它
推荐阅读
- javascript - 带有 React 的 ChartJS:时间图表上只显示一个值
- python - tkinter python中的小键盘
- apache-camel - Apache Camel 聚合 - 内存不足问题
- python-3.x - 用于重复字符的python正则表达式验证器
- c# - 如何使用 C# 驱动程序编写强类型查询过滤器,其中数组是子数组或等于 MondoDB 中的另一个数组?
- android - AccessibilityService with MediaRecorder 30 sec audio in Android Q(10) while call receive (Answer) 无法工作
- node.js - Mongoose Update 仅更改了多个嵌套数组中的数据字段
- html - HTML 表查询不是序列
- mysql - 更新随机行并在 MySQL 中获取行结果
- reactjs - 为什么我不能在 React 中对类名使用字符串插值?