Skip to content

Commit 5222f32

Browse files
author
patrickfuchs
committed
Corrige projet.
Ouverture du fichier gff et du fichier de sortie dans le même with. Commentaires style PEP8. Renommage des variables.
1 parent c270374 commit 5222f32

1 file changed

Lines changed: 43 additions & 47 deletions

File tree

projet_final/exerciceProjet.py

Lines changed: 43 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,57 @@
1-
# Dictionnaire Correspondance Nucléotides (en majuscule car constante)
1+
# Dictionnaire correspondance nucléotides (en majuscule car constante).
22
NUCLEOTIDES_COMPL = {"A" : "T", "T" : "A", "G" : "C", "C" : "G"}
33

4-
# Ouverture Lecture Fichier multiFASTA
4+
# Lecture des séquences du fichier multiFASTA.
55
with open('S_cerevisiae_chromosomes.fna', 'r') as filin:
6+
# Dictionnaire - stockage séquences chromosomiques.
67
chromosome = {}
7-
# Dictionnaire - Stockage Séquences chromosomiques
8-
# Parcours Fichier multiFASTA
8+
# Parcours fichier multiFASTA.
99
for line in filin:
10-
# Ligne Identifiant FASTA
11-
if line[0] == '>':
12-
# Conservation "BK*" uniquement
13-
ids = line.strip().split(' ')
14-
id = ids[0].lstrip('>')
15-
# Création Clé Dictionnaire
16-
chromosome[id] = ''
17-
# Ligne Séquence FASTA
10+
# Ligne identifiant FASTA.
11+
if line.startswith('>'):
12+
# Conservation "BK*" uniquement.
13+
split_comment_line = line.strip().split(' ')
14+
chr_id = split_comment_line[0].lstrip('>')
15+
# Création clé dictionnaire.
16+
chromosome[chr_id] = ''
1817
else:
19-
# Ajout Séquence Majuscule Dictionnaire
20-
chromosome[id] += line.strip().upper()
18+
# Ligne séquence FASTA, ajout séquence majuscule ds dictionnaire.
19+
chromosome[chr_id] += line.strip().upper()
2120

22-
# Ouverture Lecture Fichier GFF
23-
with open('S_cerevisiae_annotations.gff', 'r') as filin:
24-
# Dictionnaire - Stockage CDS
25-
features = {}
26-
# Parcours Fichier GFF
21+
# Ouverture lecture fichier GFF (https://fr.wikipedia.org/wiki/General_feature_format)
22+
# et du fichier de sortie multiFASTA.
23+
with open('S_cerevisiae_annotations.gff', 'r') as filin, \
24+
open('S_cerevisiae_cds.fasta', 'w') as filout:
25+
# Parcours fichier GFF.
2726
for line in filin:
28-
# Nettoyage retour à la ligne puis split() sur les tabulations
27+
# Nettoyage retour à la ligne puis split() sur les tabulations.
2928
champs = line.strip().split("\t")
30-
# On évite les lignes de commentaire et on ne traite que les CDS
31-
if len(champs) == 9 and champs[2] == 'CDS':
32-
# Colonne Attributs
29+
# On évite les lignes de commentaire et on ne traite que les CDS.
30+
if not line.startswith("#") and champs[2] == 'CDS':
31+
# id du chromosome.
32+
chr_id = champs[0]
33+
# Attention, les listes Python commence à 0 !
34+
debut = int(champs[3]) - 1
35+
# Attention, dans les tranches, le 2ème élément n'est pas inclus !
36+
fin = int(champs[4])
37+
# Sens du brin.
38+
brin = champs[6]
39+
# Récupération de l'id de la CDS.
3340
attributs = champs[8].split(";")
34-
cds = attributs[0].split("=")[1]
35-
# Attention ! Les listes Python commence à 0 !
36-
start = int(champs[3])-1
37-
# Attention ! Dans les tranches, le 2ème élément n'est pas inclus !
38-
stop = int(champs[4])
39-
# Récupération Séquences dans Dictionnaire
40-
sequence = chromosome[champs[0]][start:stop]
41-
# Si Brin -
42-
if champs[6] == '-':
41+
id_cds = attributs[0].split("=")[1]
42+
# Récupération de la séquence.
43+
sequence = chromosome[chr_id][debut:fin]
44+
# Traitement brin complémentaire.
45+
if brin == '-':
4346
seq_tmp = ''
44-
# Parcours de la séquence
47+
# Parcours de la séquence.
4548
for base in sequence:
46-
# on construit le brin complémentaire
49+
# On construit le brin complémentaire.
4750
seq_tmp += NUCLEOTIDES_COMPL[base]
48-
# puis on l'inverse
51+
# Puis on l'inverse.
4952
sequence = seq_tmp[::-1]
50-
# Stockage CDS dans Dictionnaire
51-
features[cds] = sequence
52-
53-
# Ouverture Ecriture Fichier multiFASTA
54-
with open('S_cerevisiae_cds.fasta', 'w') as filout:
55-
# Parcours Dictionnaire CDS
56-
for cds in features.keys():
57-
# Ecriture Identifiant
58-
filout.write(">"+cds+"\n")
59-
# Ecriture Séquence avec découpage par 60
60-
for n in range(0, len(features[cds]), 60):
61-
filout.write(features[cds][n:n+60]+"\n")
53+
# Ecriture identifiant dans le fichier de sortie.
54+
filout.write("> {}\n".format(id_cds))
55+
# Ecriture séquence (60 nucléotides par ligne).
56+
for n in range(0, len(sequence), 60):
57+
filout.write("{}\n".format(sequence[n:n+60]))

0 commit comments

Comments
 (0)