У меня возникла эта ошибка, когда я пытаюсь изменить код, в котором имя хромосомы не следует за именем хромосомного имени входного файла. В основном, приведенный ниже код предназначен для чтения входного файла и уведомления местоположения более короткой последовательности и вывода последовательности местоположений на основе информации, указанной в файле. Например, в chr4: 154742507-154742714 значение 151 определяет местоположение первых оснований и местоположение «CCCAGGCTGG» составляет 173 - 182. Поэтому, используя приведенный ниже код, вы сможете вернуть мне точное местоположение, добавив 173 к 154742507 и получить выход ниже. Может кто-нибудь мне помочь?Python: Как вывести правильное имя хромосомы на выходе?
Ниже приведен код с примером входного текстового файла.
input.txt
chr4:154742507-154742714
CCCAGGCTGG
151 AGTCTTGCTTTTTTTGTCGTTGCCCAGGCTGGAGTGCAGTGGCACCATCTCGGCTCAC
chr9:47303792-47303999
CCAGCCTGGG
1 TCCAGCCTGGGTGACAGCGTGAGGCTCTTGTCTCAAATAGAAAAAAAACAAAGAACAAAAAACAAAAAACCACCA
Выход
chr1 154742680 154742690
chr1 47303794 47303804
Ожидаемый результат
chr4 154742680 154742690
chr9 47303794 47303804
Код
import re # regular expressions, not needed (alternatives: the `split` method) but convenient
result = []
output_file=open('output.bed','w')
with open('Input.txt') as f:
for line in f:
if line.startswith('chr'):
label = line.strip()
elif line[0] == ' ':
# short sequence
length = len(line.strip())
# find the index of the beginning of the short sequence
for i, c in enumerate(line):
if c.isalpha():
short_index = i
break
elif line[0].isdigit():
# long sequence
n = line.split(' ')[0]
# find the index of the beginning of the long sequence
for i, c in enumerate(line):
if c.isalpha():
long_index = i
break
start = int(n) + short_index - long_index
start -= 1
end = start + length
result.append('{} {} {}'.format(label, start, end))
offset, n, start, length = 0, 0, 0, 0
output_line= "\n".join(result)
output_file.write(output_line)
output_file.close()
output_file=open('last_output.bed','w')
with open('output.bed') as fin:
for line in fin:
start, _, offset_start, offset_end = re.search(r'[^:]*:(\d+)\D+(\d+)\D+(\d+)\D+(\d+)', line).groups()
output_line=('chr1\t{}\t{}\n'.format(int(start) + int(offset_start) + 1,int(start) + int(offset_end) + 1))
output_file.write(output_line)
output_file.close()
Спасибо. Решено сейчас =) – Xiong89