繁体   English   中英

如何从文件的所有行中提取部分文本?

[英]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

首先,请记住存储某些内容(例如,在列表中)与打印它不同——如果您以后需要使用它,您需要在解析文件时将所有氨基酸序列存储在列表中。 如果您只想显示它们而不做其他任何事情,则可以打印。

你有很多方法可以做到这一点:

  1. 使用像johann's answer这样的正则表达式

  2. 使用 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
  1. 在字符串中找到<|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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM