J'ai rencontré cette erreur lorsque j'essaie de modifier le code où le nom du chromosome ne suit pas le nom de mon chromosome. Fondamentalement, le code ci-dessous est de lire le fichier d'entrée et de notifier l'emplacement de la séquence plus courte et de sortir la séquence de localisation en fonction de l'information donnée dans le fichier. Par exemple dans chr4: 154742507-154742714, la valeur 151 indique l'emplacement des premières bases et l'emplacement 'CCCAGGCTGG' est 173 - 182. Par conséquent, en utilisant le code ci-dessous devrait être capable de me renvoyer l'emplacement exact en ajoutant 173 à 154742507 et obtenir la sortie ci-dessous. Quelqu'un peut-il m'aider?Python: comment générer le nom du chromosome correct dans la sortie?
Voici le code avec un exemple de fichier texte d'entrée.
Entree.txt
chr4:154742507-154742714
CCCAGGCTGG
151 AGTCTTGCTTTTTTTGTCGTTGCCCAGGCTGGAGTGCAGTGGCACCATCTCGGCTCAC
chr9:47303792-47303999
CCAGCCTGGG
1 TCCAGCCTGGGTGACAGCGTGAGGCTCTTGTCTCAAATAGAAAAAAAACAAAGAACAAAAAACAAAAAACCACCA
sortie
chr1 154742680 154742690
chr1 47303794 47303804
sortie prévue
chr4 154742680 154742690
chr9 47303794 47303804
code
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()
Merci. Il est résolu maintenant =) – Xiong89