-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
159 lines (140 loc) · 4.79 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
"""
Cette librairie a pour but de contenir les fonctions nécessaire a la conversion de fichier bed, gmf, et ssam.
"""
"""
faire une fonction du formatage de fichier
organisation de la classe :
Nom
Start
Align
Start
strand
"""
def verifie_fichier(sortie:str,extension:str)->str:
test=sortie.split(".")
if len(test) > 1 :
fichier_sortie=open(sortie,"w")
else :
fichier_sortie=open(sortie+"."+extension,"w")
return fichier_sortie
def bed2ssam(entree:str,sortie:str):
"""
Cette fonction a pour but la conversion d'un fichier bed en ssam /!/ On n'aura pas l'information 'cigar' nécessaire au fichier ssam, on marquera alors un point.
"""
fichier_entree=open(entree,"r")
entree_lue=fichier_entree.readlines()
fichier_sortie=verifie_fichier(sortie,"ssam")
#Les fichiers sont initialisé, on va maintenant récupérer les infos qui nous interesse venant du fichier bed.
for i in entree_lue :
ligne=i.split("\t")
Align=ligne[0]
Start=ligne[1]
Nom=ligne[3]
strand=ligne[4].split("\n")[0]
#ecriture du fichier ssam
fichier_sortie.write(Nom)
fichier_sortie.write("\t")
fichier_sortie.write(strand)
fichier_sortie.write("\t")
fichier_sortie.write(Align)
fichier_sortie.write("\t")
fichier_sortie.write(Start)
fichier_sortie.write("\t")
fichier_sortie.write(".")
fichier_sortie.write("\n")
fichier_entree.close()
fichier_sortie.close()
return fichier_sortie
#On retourne le fichier de sortie pour pouvoir l'afficher si nécessaire
def bed2gmf(entree:str,sortie:str):
"""
Cette fonction a pour but la conversion d'un fichier bed en gmf, ils possèdent les memes arguments
"""
dictionnaire={}
fichier_entree=open(entree,"r")
entree_lue=fichier_entree.readlines()
fichier_sortie=verifie_fichier(sortie,"gmf")
#Les fichiers sont initialisé, on va maintenant récupérer les infos qui nous interesse venant du fichier bed.
for i in entree_lue :
ligne=i.split("\t")
if ligne[3] not in dictionnaire :
dictionnaire[ligne[3]]=[i]
else :
dictionnaire[ligne[3]].append(i)
for i in dictionnaire.keys():
fichier_sortie.write("Seq")
fichier_sortie.write("\t")
fichier_sortie.write(i)
fichier_sortie.write("\n")
for j in dictionnaire[i]:
fichier_sortie.write("Align")
fichier_sortie.write("\t")
ligne_split=j.split("\t")
fichier_sortie.write(ligne_split[0])
fichier_sortie.write("\t")
fichier_sortie.write(ligne_split[1])
fichier_sortie.write("\t")
fichier_sortie.write(ligne_split[2])
fichier_sortie.write("\t")
fichier_sortie.write(ligne_split[4].split("\n")[0])
fichier_sortie.write("\n")
fichier_entree.close()
fichier_sortie.close()
return fichier_sortie
def ssam2bed(entree:str,sortie:str):
"""
Cette fonction a pour but la conversion d'un fichier ssam en fichier bed
"""
fichier_entree=open(entree,"r")
entree_lue=fichier_entree.readlines()
fichier_sortie=verifie_fichier(sortie,"bed")
for i in entree_lue:
ligne=i.split("\t")
Align=ligne[2]
Start=ligne[3]
End="."
Nom=ligne[0]
strand=ligne[1]
if strand == '1':
strand = '+'
else :
strand = '-'
#ecriture du fichier bed
fichier_sortie.write(Align)
fichier_sortie.write("\t")
fichier_sortie.write(Start)
fichier_sortie.write("\t")
fichier_sortie.write(End)
fichier_sortie.write("\t")
fichier_sortie.write(Nom)
fichier_sortie.write("\t")
fichier_sortie.write(strand)
fichier_sortie.write("\n")
fichier_entree.close()
fichier_sortie.close()
return fichier_sortie
def gmf2bed(entree:str,sortie:str):
"""
Cette fonction a pour but la conversion d'un fichier gmf en fichier bed
"""
fichier_entree=open(entree,"r")
entree_lue=fichier_entree.readlines()
fichier_sortie=verifie_fichier(sortie,"bed")
for i in entree_lue:
ligne=i.split("\t")
if ligne[0] == "Seq":
Nom=ligne[1]
else:
fichier_sortie.write(ligne[1])
fichier_sortie.write("\t")
fichier_sortie.write(ligne[2])
fichier_sortie.write("\t")
fichier_sortie.write(ligne[3])
fichier_sortie.write("\t")
fichier_sortie.write(Nom)
fichier_sortie.write("\t")
fichier_sortie.write(ligne[4])
fichier_sortie.write("\n")
fichier_entree.close()
fichier_sortie.close()
return fichier_sortie