Изолировать часть последовательности поста из данных внешнего подсчета - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь выделить часть последовательности fastta, используя данные подсчета из отдельного текстового файла.

Я ввел фасту в функцию def analy_seq.Когда я использую этот код, кажется, он работает, но я получаю все в выражении print в вертикальном списке, по одному нуклеотиду за раз.Я хочу, чтобы идентификатор и каждая связанная группа бит / с были напечатаны горизонтальными линиями

import re

def analyze_seq(id, seq, fname="FPT_REAL_unique.txt"):
  with open(fname) as input_file:
    for line in input_file:
      columns = line.rstrip('\n').split('\t')
      qid, qstart, qend, gap_length = columns
      if qid == id:
        count2 = 0
        for seq_item in seq:
            count2 += 1
            if int(qstart) >= count2 <=int(qend):
                print(id + "\t" + seq_item)


my_file = open("Galaxy55-[Tabular-to-FASTA_on_data_54].fasta" , "r")

id = ''
seq = ''
count = 0

for x in my_file:
    if re.search(r"^>", x):
        if id != '':
            analyze_seq(id, seq)
            count = count + 1
        id = x.rstrip("\n")
        seq = ''
    else:
        seq = seq + x.rstrip("\n")

Я также попытался

print(id + "\t" + y[str(qstart):str(qend)]) 

и получил эту ошибку: TypeError: индексы слайса должны быть целыми числами или нет илииметь индекс метод

The output I am looking for will look like this:
>Trinity124124    AGCTAGCTAGCTAGCTA
>Trinity182537    AGCTAGCTAGCTACGTA

1 Ответ

0 голосов
/ 05 июля 2019

Если ваша проблема заключается в печати идентификаторов, связанных с каждым последующим в одной строке, напечатайте их без новой строки и добавьте новую строку после группы.

Попробуйте что-то вроде этого:

def analyze_seq(id, seq, fname="FPT_REAL_unique.txt"):
  with open(fname) as input_file:
    for line in input_file:
      columns = line.rstrip('\n').split('\t')
      qid, qstart, qend, gap_length = columns
      if qid == id:
        count = 0
        bps = []
        for seq_item in seq:
          count += 1
          if count <= int(qstart) <= int(qend):  # I suppose this is more correct?
            bps.append(id)
        if bps:  # Something was associated with qid.
          print(id, '\t', ' '.join(bps))  # bps are space-separated; alter to taste.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...