python - 如何选择fasta文件中标题的最后一个字符?
问题描述
我有一个这样的fasta文件:
>XP1987651-apple1
ACCTTCCAAGTAG
>XP1235689-lemon2
TTGGAGTCCTGAG
>XP1254115-pear1
ATGCCGTAGTCAA
我想创建一个文件,选择以“1”结尾的标题,例如:
>XP1987651-apple1
ACCTTCCAAGTAG
>XP1254115-pear1
ATGCCGTAGTCAA
到目前为止,我创建了这个:
fasta = open('x.fasta')
output = open('x1.fasta', 'w')
seq = ''
for line in fasta:
if line[0] == '>' and seq == '':
header = line
elif line[0] != '>':
seq = seq + line
for n in header:
n = header[-1]
if '1' in n:
output.write(header + seq)
header= line
seq = ''
if "1" in header:
output.write(header + seq)
output.close()
但是,它不会在创建的新文件中产生任何输出。你能找出错误吗?谢谢
解决方案
一种选择是将整个文件读入一个字符串,然后使用re.findall
以下正则表达式模式:
>[A-Z0-9]+-\w+1\r?\n[ACGT]+
示例脚本:
fasta = open('x.fasta')
text = fasta.read()
matches = re.findall(r'>[A-Z0-9]+-\w+1\r?\n[ACGT]+', text)
print(matches)
对于您上面提供的示例数据,将打印:
['>XP1987651-apple1\nACCTTCCAAGTAG', '>XP1254115-pear1\nATGCCGTAGTCAA']
推荐阅读
- python - 网络抓取最常见的名字
- powershell - 使用 PowerShell 对大量文件设置文件权限
- javascript - 有没有办法在我们自己的服务器上部署 GSuite 应用程序并在 GSuite 市场上运行?让每个人都可以使用它
- javascript - Bootstrap-star-rating 插件 - 事件被多次调用
- c++ - scanf中是否有保证的分配顺序?
- angular - 在 ag-grid 中的 gridActions 中设置 Id
- c# - 有没有办法仅在成功打印后完成时检索 Win32_Printjob 信息?
- arrays - jq in/1 的行为不一致
- mysql - 如何解决这个使用 where 条件作为列值的 mysql 查询?
- python - 如何将 .bytes 保存的模型统一加载到统一环境中,该模型在 tnesorflow1.4 中被冻结?