Echanges autour d'EduPython.
Vous n'êtes pas identifié(e).
Bonjour, j'ai créé un programme dont le but est de créer un dictionnaire contenant le nom de mes élèves comme clés, et leurs moyennes de classe comme valeurs.
Le programme se base sur le csv téléchargeable via pronote dans la saisie des notes.
Voici le programme :
import io from random import * import matplotlib.pyplot as plt ListDesEleves = [] #Ouverture du fichier "2D3T3.csv" en mode lecture. io : pour gérer l'encoding utf8 sans quoi les accents sont foireux with io.open("2D3T3.csv", 'r', encoding='utf8') as fichier: #Contenu du fichier 2D3T3.csv : contenu=fichier.readlines() #Suppression de la première et de la dernière ligne du ficchier contenu.pop(0) contenu.pop(-1) #Creation des objets élèves pour chaque couple (élève,moyenne) du fichier et ajout à la ListDesEleves L=[] K=[] for ligne in contenu : k=0 nom="" moyenne="" #Pour chaque caractère de la ligne courante, si on a compté aucun ';' (k==0), on ajoute le caractère au nom (sauf si le caractère est un "). #Pour chaque caracère après avoir compté un ';' (k==1), on ajoute le caractère à la moyenne #On arrète de lire la ligne si on compte deux ';' (k==2) for char in ligne : if char!=";" and char!='"' and k==0: nom+=char elif char!=";" and k==1: moyenne+=char elif char==";": k=k+1 elif k==2: break L.append(nom) K.append(moyenne) eleve=Eleve(nom,moyenne) ListDesEleves.append(eleve) #fermeture du fichier fichier.close #Remplace les moyennes enregistrées en tant que chaîne de caractères par des flottants. for i in range(len(K)): K[i]=K[i].replace(",",".") K[i]=float(K[i]) #affichage des élèves contenus dans la ListDesEleves : ##for eleve in ListDesEleves : ## print(eleve.nom," à une moyenne de ",eleve.moyenne,"/20") ################################################################# #Crée le dictionnaire représentant les élèves de la classe et leurs notes Classe={} for i in range(len(K)): Classe[L[i]]=K[i]
Le code marche très bien dès l'instant où le module est enregistré dans le même répertoire que le fichier CSV.
En revanche, les choses se gâtent dès lors que je fais un copier-coller de ce code, et que je intègre dans une fonction (qui a pour argument le nom du fichier csv, et qui retourne en sortie le dictionnaire contenant les élèves).
En effet, la ligne 7 du code qui suit échoue, car le fichier est introuvable. En cherchant à trouver le chemin courant où se trouve le module lors de l'exécution de la fonction, il me répond qu'il est dans C:/Edupython.
Alors qu'à l'exécution du code présenté ci-dessous, le chemin courant est C:/Users/Documents/2018-2019/Python/main.py
def recup(nom_fichier): """nom_fichier est le nom du fichier csv téléchargé avec les notes des élèves via pronote, en chaine de caractère. recup renvoie alors deux listes, l'une avec les noms des élèves, et l'autre avec leurs notes /!\ S'il y a un élève qui n'a pas de notes, le supprimer de la liste ou ajouter une note fictive /!\ """ #Ouverture du fichier "nom_fichier.csv" en mode lecture with io.open(nom_fichier+".csv", 'r', encoding='utf8') as fichier: #Contenu du fichier nom_fichier.csv : contenu=fichier.readlines() #Suppression de la première et de la dernière ligne du fichier contenu.pop(0) contenu.pop(-1) #Creation des objets élèves pour chaque couple (élève,moyenne) du fichier et ajout à la ListDesEleves L=[] K=[] for ligne in contenu : k=0 nom="" moyenne="" #Pour chaque caractère de la ligne courante, si on a compté aucun ';' (k==0), on ajoute le caractère au nom (sauf si le caractère est un "). #Pour chaque caracère après avoir compté un ';' (k==1), on ajoute le caractère à la moyenne #On arrète de lire la ligne si on compte deux ';' (k==2) for char in ligne : if char!=";" and char!='"' and k==0: nom+=char elif char!=";" and k==1: moyenne+=char elif char==";": k=k+1 elif k==2: break L.append(nom) K.append(moyenne) #fermeture du fichier fichier.close for i in range(len(K)): K[i]=K[i].replace(",",".") K[i]=float(K[i]) #affichage des élèves contenus dans la ListDesEleves : ##for eleve in ListDesEleves : ## print(eleve.nom," à une moyenne de ",eleve.moyenne,"/20") return L,K ################################################################# def dico(L,K): """Créer un dictionnaire avec les clés contenant L ayant pour valeurs les éléments de K""" Classe={} for i in range(len(K)): Classe[L[i]]=K[i] return Classe
Ceci renvoie :
>>> recup("2D3T3")
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Users\Documents\2018-2019\Python\CSV\groupe_eleve.py", line 11, in recup
with io.open(nom_fichier+".csv", 'r', encoding='utf8') as fichier:
FileNotFoundError: [Errno 2] No such file or directory: '2D3T3.csv'
Et le plus étonnant, c'est qu'en faisant un print de chacune des premières instructions, et en recopiant les données affichées dans le print dans la console pour les exécuter dans la console, on arrive bien à trouver le fichier.
Il semblerait (un ami a essayé de comprendre pourquoi il y avait un tel problème) que le répertoire courant à l'exécution de la fonction est C:/Edupython, et n'a trouvé comme moyen de corriger le problème que de mettre le chemin absolu dans la commande with io.open (et encore, impossible de concaténer le chemin absolu jusqu'au dossier avec le nom du fichier).
En attendant, je change le code à chaque fois dans la fonction, en conservant le chemin absolu. Mais je suis curieux de comprendred'où vient le problème que je rencontre. Si quelqu'un a déjà rencontré ce problème, je suis toute ouïe.
Bonne soirée
Dernière modification par Pacotille (2019-06-10 20:01:49)
Hors ligne
PS : Pour préciser le code : il y a dans le code aux lignes 36-37 des objets définis dans un autre programme (objet élève) mais qui n'ont pas d'utilité dans le programme présenté ici qui n'utilise que les listes K et L.
Hors ligne
Problème résolu, il semblerait que le logiciel n'ait pas aimé que j'appelle un de mes dossiers CSV
Hors ligne
Bonjour à tous, j'ai le même problème mais sans solution avec le code suivant:
import csv def extraction(nom_fichier): # On commence par ouvrir le fichier fichier=open(nom_fichier,encoding="utf-8") base1=list(csv.reader(fichier)) # on transforme le contenu du fichier en liste fichier.close() # On referme le fichier Base_extraite=[] for i in range (1,len(base1)): # on commence à 1 puisque la première ligne correspond aux descripteurs dico={} # On va définir autant de dictionnaires que d'entrée dans la table for j in range (len(base1[0])): # Cela va permettre de parcourir tous les descripteurs descripteur = base1[0][j] # On définit le nom du descripteur valeur=base1[i][j] # On définit la valeur associée au descripteur dico[descripteur]=valeur # pour chaque dictionnaire, le descripteur se voit affecter sa valeur Base_extraite.append(dico) return Base_extraite
J'ai testé en me mettant dans un dossier D:\test_python et ça ne fonctionne pas
À noter que lorsque je lance le fichier avec Thonny, cela fonctionne sans soucis.
Si quelqu'un a des idées, je suis preneur.
Merci
Hors ligne
Bonjour,
Je rencontre la même difficulté que Vandymath (post du 4 avril 2022 à 16h41) . Dans la cadre du chapitre "Photographie numérique" en SNT seconde, je demande aux élèves de modifier une image ( inversion horizontal/vertical, gauche/droite, assombrissement ).
3 fonctions sont définies dans un script. Le script python et l'image "pontscouverts.jpg" sont placées dans le même répertoire donc il ne devrait pas y avoir de problème mais lorsque j'appelle la fonction depuis la console j'obtiens le message
FileNotFoundError :[Errno 2] No such file or directory :’pontscouverts.jpg”
Le code est :
from PIL import Image
def action_symetrie_gauchedroite(nom):
"""Effectue la symérie gauche-droite"""
source = Image.open(nom).convert('RGB')
largeur = source.width
hauteur = source.height
dest = Image.new('RGB', (largeur, hauteur))
for x in range(largeur):
for y in range(hauteur):
rouge, vert, bleu = source.getpixel((x, y))
dest.putpixel(
(largeur -x -1,y), # On inverse la position des pixels de gauche et droite
(rouge,vert,bleu), # On garde la même couleur que le Pixel de référence
)
dest.save("gauchedroite.png")
return dest
A noter : cela fonctionne sans problème sur Python 3.8.10 ( https://www.python.org).
Quelqu'un a t il une idée de ce qui se passe ? Cela semble vraiment spécifique à EduPython car cela fonctionne sur d'autres environnements.
Merci
Dernière modification par davidC (2022-05-04 09:28:25)
Hors ligne
Bonjour,
Je rencontre la même difficulté que Vandymath (post du 4 avril 2022 à 16h41) . Dans la cadre du chapitre "Photographie numérique" en SNT seconde, je demande aux élèves de modifier une image ( inversion horizontal/vertical, gauche/droite, assombrissement ).
3 fonctions sont définies dans un script. Le script python et l'image "pontscouverts.jpg" sont placées dans le même répertoire donc il ne devrait pas y avoir de problème mais lorsque j'appelle la fonction depuis la console j'obtiens le message
FileNotFoundError :[Errno 2] No such file or directory :’pontscouverts.jpg”Le code est :
from PIL import Image
def action_symetrie_gauchedroite(nom):
"""Effectue la symérie gauche-droite"""
source = Image.open(nom).convert('RGB')
largeur = source.width
hauteur = source.height
dest = Image.new('RGB', (largeur, hauteur))for x in range(largeur):
for y in range(hauteur):
rouge, vert, bleu = source.getpixel((x, y))
dest.putpixel(
(largeur -x -1,y), # On inverse la position des pixels de gauche et droite
(rouge,vert,bleu), # On garde la même couleur que le Pixel de référence
)dest.save("gauchedroite.png")
return destA noter : cela fonctionne sans problème sur Python 3.8.10 ( https://www.python.org badland).
Quelqu'un a t il une idée de ce qui se passe ? Cela semble vraiment spécifique à EduPython car cela fonctionne sur d'autres environnements.
Merci
(largeur -x -1,y), # On inverse la position des pixels de gauche et droite
As-tu essayé de changer (largeur -1 -x,y) ?
Dernière modification par glenkohler (2023-06-23 09:37:22)
Hors ligne
Your project to create a student dictionary from a CSV file is quite impressive! The challenge with file paths in Python can be tricky. Using absolute paths might solve your problem, but consider using os.path to ensure portability.
Hors ligne
C'est une idée fantastique de gérer les notes de vos élèves avec un dictionnaire en Python ! Pour rendre cela encore plus interactif, pourquoi ne pas intégrer des éléments ludiques comme dans le jeu Infinite Craft ? Cela pourrait encourager les élèves à améliorer leurs performances tout en rendant l'apprentissage plus amusant. Si vous avez besoin d'idées sur la façon de relier le jeu au suivi académique, je serais ravi de discuter !
Dernière modification par geraldortiz (2025-02-04 01:17:38)
Hors ligne