Question sur un exemple de script en python
khampoulaye
Messages postés
4
Statut
Membre
-
khampoulaye Messages postés 4 Statut Membre -
khampoulaye Messages postés 4 Statut Membre -
Bonjour à tous,
Je suis un novice en programmation en python. Et il se trouve que durant la moitié de mon stage de fin d'études je dois programmer en python. Actuellement je suis en train de faire des efforts pour l'apprendre, mais j'avoue que j'ai du mal..
Dans le cadre de mon stage, je suis en train d'étudier la modélisation de la thrombose, donc je fais de la biochimie du sang en partie. Il y a 63 réactions biochimiques(chacune avec sa propre coefficient de réaction) que j'ai listé pour le moment, et je dois écrire un programme qui affiche le bon coefficient de réaction pour n'importe quelle réaction. Sachant que j'ai crée un fichier.in et un fichier.xml qui contiennent toutes les réactions et leur coefficient de réaction.
Merci de votre aide
Je suis un novice en programmation en python. Et il se trouve que durant la moitié de mon stage de fin d'études je dois programmer en python. Actuellement je suis en train de faire des efforts pour l'apprendre, mais j'avoue que j'ai du mal..
Dans le cadre de mon stage, je suis en train d'étudier la modélisation de la thrombose, donc je fais de la biochimie du sang en partie. Il y a 63 réactions biochimiques(chacune avec sa propre coefficient de réaction) que j'ai listé pour le moment, et je dois écrire un programme qui affiche le bon coefficient de réaction pour n'importe quelle réaction. Sachant que j'ai crée un fichier.in et un fichier.xml qui contiennent toutes les réactions et leur coefficient de réaction.
Merci de votre aide
A voir également:
- Question sur un exemple de script en python
- Tableau word exemple - Guide
- Exemple de code ascii - Guide
- Url exemple - Guide
- Script vidéo youtube - Guide
- Planning en 12h exemple - Télécharger - Outils professionnels
s0 = [[],[]]
f=open('compute_biochem.in')
for line in f.readlines():
if line[0]!='#':
if ":" in line:
li=line.split(":")
if li[0].split()[0] == 'SPECIES':
lis=li[1].split(';')
s0[0].append(lis[0].split()[0])
s0[1].append(lis[1].split('\n')[0].split()[0])
elif li[0].split()[0] == 'XMLFILE':
INPUTFILE = li[1].split('\n')[0].split()[0]
f.close()
print('Biochemistry read from ',INPUTFILE)
print(' ')
#
# Compute source from chemistry
#
def source_biochem(concentration,time, reac_rate, index_in, index_out):
number_of_species = len(concentration)
number_of_reactions = len(reac_rate)
source = [0 for s in range(number_of_species)]
for r in range(number_of_reactions):
ind_in = index_in[r]
ind_out = index_out[r]
for spec in ind_in:
source[spec] = source[spec] - reac_rate[r] * reduce(mul,[concentration[s] for s in ind_in])
for spec in ind_out:
source[spec] = source[spec] + reac_rate[r] * reduce(mul,[concentration[s] for s in ind_in])
return source
#
# Read an .xml file for biochemistry
#
tree = etree.parse(INPUTFILE)
#
# Read the species from .xml and check consistency with initial conditions in compute_biochem.in
#
for spec in tree.xpath("species"):
rr=spec.findall("name")
spec_name = [rr[n].text for n in range(len(rr))]
number_of_species = len(spec_name)
#
# Check if the list of species is correct
#
if spec_name != sorted(s0[0]):
print('Species list not valid')
print('From .xml file: ',spec_name)
print('From .in file: ',sorted(s0[0]))
quit()
#
# if list of species is correct, reorder the initial concentrations and generate y0
# y0 contains the initial conditions of the species in the same order as in spec_name
#
s0t=[[x[i] for x in s0] for i in range(len(s0[0]))]
s0tsorted=sorted(s0t,key=lambda col: col[0])
s0sorted=[[x[i] for x in s0tsorted] for i in range(len(s0tsorted[0]))]
y0 = [float(data) for data in s0sorted[1]]
#
# Read the reactions and deduce species indices for computing the source terms
#
for reac in tree.xpath("reactions"):
rr=reac.findall("reaction")
reac_name = [rr[n].text for n in range(len(rr))]
rr=reac.findall("reaction_rate")
reac_rate = [rr[n].text for n in range(len(rr))]
number_of_reactions = len(reac_name)
specs_in=[[] for r in range(number_of_reactions)]
specs_out=[[] for r in range(number_of_reactions)]
index_in=[[] for r in range(number_of_reactions)]
index_out=[[] for r in range(number_of_reactions)]
for reac in reac_name:
all_in = reac[:reac.index("--")].split("+")
specs_in[reac_name.index(reac)] = [spec.split() for spec in all_in][0]
index_in[reac_name.index(reac)] = [spec_name.index(spec.split()[0]) for spec in all_in]
all_out = reac[reac.index("--")+2:].split("+")
specs_out[reac_name.index(reac)] = [spec.split() for spec in all_out][0]
index_out[reac_name.index(reac)] = [spec_name.index(spec.split()[0]) for spec in all_out]
fichier = open("reactions2.in", "r")
line=fichier.readline()
while line:
print(line)
print(("reac_rate"))
line=fichier.readline()
fichier.close()
#
# Print case
#
print("Species :")
print(spec_name)
print(" ")
print('Initial conditions: ',y0)
print(" ")
print("Reactions :")
print(reac_name)
print(" ")
print("Reactions rates:")
print(reac_rate)
print(" ")
print("Indices in / out:")
print(index_in)
print(index_out)
j'ai voulu ouvrir un fichier "reactions2.in" pour que le programme puisse aller là bas car c'est là bas où se trouvent les fichiers.in et xml des reactions biochimiques. Du coup le programme me dit :"I/O operation on closed file"
Par exemple si c'est du basic :
s0 = [[],[]] f=open('compute_biochem.in') for line in f.readlines(): if line[0]!='#': if ":" in line: li=line.split(":") if li[0].split()[0] == 'SPECIES': lis=li[1].split(';') s0[0].append(lis[0].split()[0]) s0[1].append(lis[1].split('\n')[0].split()[0]) elif li[0].split()[0] == 'XMLFILE': INPUTFILE = li[1].split('\n')[0].split()[0] f.close()Ou, si c'est du html :
s0 = [[],[]] f=open('compute_biochem.in') for line in f.readlines(): if line[0]!='#': if ":" in line: li=line.split(":") if li[0].split()[0] == 'SPECIES': lis=li[1].split(';') s0[0].append(lis[0].split()[0]) s0[1].append(lis[1].split('\n')[0].split()[0]) elif li[0].split()[0] == 'XMLFILE': INPUTFILE = li[1].split('\n')[0].split()[0] f.close()Merci.
Ceci dit... Je ne peux pas faire grand chose d'autre pour toi. Si un spécialiste ne passe pas d'ici quelques heures, relance le sujet (si je suis dans le coin, je le verrais et je pourrais essayer de te trouver un spécialiste).
Merci pour les conseils, je tâcherais de relancer le sujet s'il n'y a pas de spécialistes d'ici quelques heures.