[英]How can I extract a portion of text from all lines of a file?
我有这些序列:
0,<|endoftext|>ERRDLLRFKH:GAGCGCCGCGACCTGTTACGATTTAAACAC<|endoftext|>
1,<|endoftext|>RRDLLRFKHG:CGCCGCGACCTGTTACGATTTAAACACGGC<|endoftext|>
2,<|endoftext|>RDLLRFKHGD:CGCGACCTGTTACGATTTAAACACGGCGAC<|endoftext|>
3,<|endoftext|>DLLRFKHGDS:GACCTGTTACGATTTAAACACGGCGACAGT<|endoftext|>
我只想得到氨基酸序列,像这样:
ERRDLLRFKH:
RRDLLRFKHG:
RDLLRFKHGD:
DLLRFKHGDS:
到目前为止,我已经编写了这个脚本:
with open("example_val.txt") as f:
for line in f:
if line.startswith(""):
line = line[:-1]
print(line.split(":", 1))
尽管如此,我只得到了原始序列。 请给我一些建议。
正则表达式解决方案:
import re
with open("example_val.txt") as f:
re.findall("(?<=>)[a-zA-Z]*:", f.read())
正则表达式解释:
(?<=>)
: 是一个积极的向后看,它在我们的比赛之前找到 > 字符[a-zA-Z]*:
: 匹配 az 和 AZ 中存在的零个或多个字符,末尾有冒号在 Regex101 中测试: regex101.com/r/qVGCYF/1
首先,请记住存储某些内容(例如,在列表中)与打印它不同——如果您以后需要使用它,您需要在解析文件时将所有氨基酸序列存储在列表中。 如果您只想显示它们而不做其他任何事情,则可以打印。
你有很多方法可以做到这一点:
使用像johann's answer这样的正则表达式
使用 CSV 阅读器仅隔离逗号分隔文本文件的第二列,然后对字符串进行切片,因为您知道所需的值从第 13 个索引开始并在第 23 个索引结束
import csv
sequences = [] # Create an empty list to contain all sequences
with open("example_val.txt") as f:
reader = csv.reader(f)
for row in reader:
element = row[1] # Get the second element in the row
seq = element[13:24] # Slice the element
sequences.append(seq) # Append to the list
print(seq) # Or print the current sequence
<|endoftext|>
的索引。 相对于这个索引i
,你知道你的序列从索引i + len('<|endoftext|>')
开始,到i + len('<|endoftext|>') + 10
结束with open("example_val.txt") as f:
for line in f:
i = line.find('<|endoftext|>')
seq_start = i + len('<|endoftext|>')
seq_end = seq_start + 10
seq = line[seq_start:seq_end+1] # Slice the line
sequences.append(seq) # Append to the list
print(seq) # Or print the current sequence
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.