Aller au contenu
Forums Tennis-Classim
bhamp0

Outil de récupération du classement futur

Recommended Posts

Dans ma version, j'avais viré la variable "prenom" que j'estimais inutile pour tout intégrer à la variable "nom" :

lignes 225/226  au sein de la fonction getIdentifiant :

        nom = matches[1]
        prenom = matches[2]
	

 

remplacées par :

        nom = remove_accents(matches[1] + " " + matches[2])
	

et le return associé :

	return nom + ' ' + prenom, idu, cl, sexe
	

devient juste :

	return nom, idu, cl, sexe
	

En ayant au préalable déclaré bien sûr la fonction remove_accents en début de fichier après la déclaration des classes :

    def remove_accents(input_str):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
	

qui nécessite la librairie unicodedata

import unicodedata
	

 

EDIT : J'ai aussi remplacé dans la fonction classementJoueur :

	        print(s.encode(sys.stdout.encoding, errors='replace'))
	

par :

	       print(remove_accents(s))
	

afin de virer les accents dans les noms des adversaires affichés en fin de calcul

 

La version de palmares.py intégrant ces modifications : ICI

Partager ce message


Lien à poster
Partager sur d’autres sites

@Yusuke118 merci pour les infos. Effectivement retirer les accents permet d'éliminer les erreurs d'encodage en pratique mais je pense que la meilleure solution est de passer à une gestion plus saine de unicode/bytes, ce que Python 2 permet très difficilement.

Du coup j'en profite pour proposer cette version de test basée sur Python 3 : https://github.com/coti/classement/archive/python3.zip
À part la migration Python 3 c'est la version requests. J'ai fait quelques changements dessus récemment. Voir ici les derniers commits : https://github.com/coti/classement/commits/python3

Merci à @ggman23 pour avoir signalé le bug sur la normalisation des classements "Top XX".

Les changements de code pour Python 2 sont visibles ici : https://github.com/coti/classement/commit/1634ca7b757ca3cae0ccb2417fe9ecd77cede8da

 

Il y a 13 heures, Grumms a dit :

La dernière mise à jour marche nickel chez moi. Possible de l'avoir en .exe ? Au boulot je peux pas installer Pyhton :/

J'ai seulement un Mac mais je suis en train de m'installer une VM Windows. Je vais essayer de faire un exe avec.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 48 minutes, Nicolas a dit :

@Yusuke118 merci pour les infos. Effectivement retirer les accents permet d'éliminer les erreurs d'encodage en pratique mais je pense que la meilleure solution est de passer à une gestion plus saine de unicode/bytes, ce que Python 2 permet très difficilement.

Du coup j'en profite pour proposer cette version de test basée sur Python 3 : https://github.com/coti/classement/archive/python3.zip
À part la migration Python 3 c'est la version requests. J'ai fait quelques changements dessus récemment. Voir ici les derniers commits : https://github.com/coti/classement/commits/python3

Merci à @ggman23 pour avoir signalé le bug sur la normalisation des classements "Top XX".

Les changements de code pour Python 2 sont visibles ici : https://github.com/coti/classement/commit/1634ca7b757ca3cae0ccb2417fe9ecd77cede8da

 

J'ai seulement un Mac mais je suis en train de m'installer une VM Windows. Je vais essayer de faire un exe avec.

Windows n'est même pas nécessaire avec pyinstaller il me semble, il faut juste l'installer avec pip. Tu pourrais très bien build sous mac si je ne me trompe pas

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 1 minute, Paul91Essonne a dit :

Windows n'est même pas nécessaire avec pyinstaller il me semble, il faut juste l'installer avec pip. Tu pourrais très bien build sous mac si je ne me trompe pas

PyInstaller produit un exécutable pour la plate-forme sur laquelle il est lancé. Donc pour faire un exe il faut le lancer sous Windows. J’ai justement vérifié ce point parce que je suis sur Mac.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 2 minutes, Nicolas a dit :

PyInstaller produit un exécutable pour la plate-forme sur laquelle il est lancé. Donc pour faire un exe il faut le lancer sous Windows. J’ai justement vérifié ce point parce que je suis sur Mac.

Ah ok bon à savoir je ne savais pas.

Partager ce message


Lien à poster
Partager sur d’autres sites
[mention=2686]Yusuke118[/mention] merci pour les infos. Effectivement retirer les accents permet d'éliminer les erreurs d'encodage en pratique mais je pense que la meilleure solution est de passer à une gestion plus saine de unicode/bytes, ce que Python 2 permet très difficilement.
Du coup j'en profite pour proposer cette version de test basée sur Python 3 : [mention=2725]ggman23[/mention] pour avoir signalé le bug sur la normalisation des classements "Top XX".
Les changements de code pour Python 2 sont visibles ici : https://github.com/coti/classement/commit/1634ca7b757ca3cae0ccb2417fe9ecd77cede8da
 
J'ai seulement un Mac mais je suis en train de m'installer une VM Windows. Je vais essayer de faire un exe avec.
Ha merci, c'est cool. Je veux bien tester avec Python 3 si les 2 versions peuvent cohabiter sur le même ordinateur.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai réussi à installer la version 3 et on peut toujours utiliser la version 2, en faisant : py -2 palmares.py
ça lancera avec la version 2.

Sinon j'ai testé la version python 3 pour une dizaine de palmares en profondeur 4 et ça marche trés bien :)

Que faudrait il rajouter dans le code pour avoir dans le fichier txt qui est généré pour avoir tout le calcul du classement et pas seulement le résultat du classement obtenu et les classements des adversaires ?
Je veux dire par exemple d'avoir dans le fichier txt ça en plus :

 ==> Classement proposé : 15/4
V =  12 (Nombre de victoires) :  15/5, 30/1, 30/2, 30, 30, 30/1, 30/2, 30/2, 30/4, 30/4, 30/1, 30/3
E =  0 (Nb de défaites à échelon égal) :
I =  2 (Nb de défaites à échelon -1) : 15/5, 15/5
G =  6 (Nb de défaites à échelons <= -2 et par w.o à partir du 3e) : 30/3, 30, 30/1, 30/1, 30, 30
V - E - 2I - 5G : -22
Victoires prises en compte (8) : 15/5, 30, 30, 30/1, 30/1, 30/1, 30/2, 30/2
Bonif championnat indiv : 45
Points acquis : 160 - points nécessaires pour le maintien à 15/4 : 315
 ==> Classement proposé : 15/5
V =  12 (Nombre de victoires) :  15/5, 30/1, 30/2, 30, 30, 30/1, 30/2, 30/2, 30/4, 30/4, 30/1, 30/3
E =  2 (Nb de défaites à échelon égal) : 15/5, 15/5
I =  3 (Nb de défaites à échelon -1) : 30, 30, 30
G =  3 (Nb de défaites à échelons <= -2 et par w.o à partir du 3e) : 30/3, 30/1, 30/1
V - E - 2I - 5G : -11
Victoires prises en compte (8) : 15/5, 30, 30, 30/1, 30/1, 30/1, 30/2, 30/2
Bonif championnat indiv : 45
Points acquis : 255 - points nécessaires pour le maintien à 15/5 : 305

ça ça doit etre le truc simple à faire, je pense qu'il faut juste rajouter un parametre dans :

print("Nouveau classement: ", harm, " (après harmonisation) - ", new_cl, " (calculé)")

    # on crache la sortie du joueur dans un fichier
    fn = "{}_{}_p{}.txt".format(LICENCE, nom, profondeur)
    fd = open( fn, "w" )
    fd.write(s)
    fd.close()

    return

Mais je ne sais pas lequel ^^
Ou alors si possible d'avoir dans le fichier txt combien de points il manque pour le classement au dessus. Là dans mon exemple il manque 50 points au joueur pour se maintenir à 15/5 . Or a l'heure actuelle dans le fichier txt , on verra juste que son classement sera à 30, sans info de combien il manque, je trouve ça intéressant d'avoir cette info en plus dans le fichier txt.

c'est simple à faire @Nicolas ou @yusuke118 ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 5 heures, ggman23 a dit :

...
Que faudrait il rajouter dans le code pour avoir dans le fichier txt qui est généré pour avoir tout le calcul du classement et pas seulement le résultat du classement obtenu et les classements des adversaires ?

...
c'est simple à faire @Nicolas ou @yusuke118 ?

En fait l'année dernière j'avais prévu de le faire sur la fin août / début septembre mais comme on a changé de saison + la sortie des nouveaux classements j'ai laissé tomber.

De mémoire c'est plus compliqué que ça mais je peux me tromper...

Il me semble qu'il fallait modifier pas mal de fonctions afin de leur passer les arguments/variables nécessaires (remontée des données gérées par le script classement.py vers le script palmares.py ) pour pouvoir récupérer le détail du calcul et l'écrire sur la fin.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 2 minutes, Yusuke118 a dit :

En fait l'année dernière j'avais prévu de le faire sur la fin août / début septembre mais comme on a changé de saison + la sortie des nouveaux classements j'ai laissé tomber.

De mémoire c'est plus compliqué que ça mais je peux me tromper...

Il me semble qu'il fallait modifier pas mal de fonctions afin de leur passer les arguments/variables nécessaires (remontée des données gérées par le script classement.py vers le script palmares.py ) pour pouvoir récupérer le détail du calcul et l'écrire sur la fin.

ah mince moi qui pensait que ça serait facile ^^

Tans pis alors :)

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 16 heures, Nicolas a dit :

Merci à @ggman23 pour avoir signalé le bug sur la normalisation des classements "Top XX".

 

Tu l'as corrigé ou pas ?

Car en python27 j'ai eu une erreur sur un calcul d'un joueur en profondeur 3 (avec un joueur du Top100 dans les palmares récupérés) qui remonte une erreur de type KeyError: u'Top'

Palmarès récupérés pour 14013 joueurs

Traceback (most recent call last):
  File "C:\Python27\palmares.py", line 634, in <module>
    main()
  File "C:\Python27\palmares.py", line 599, in main
    recupClassement(login, password, licence, profondeur, args.details)
  File "C:\Python27\palmares.py", line 538, in recupClassement
    profondeur - min(details_profondeur, profondeur))
  File "C:\Python27\palmares.py", line 479, in classementJoueur
    nc, harm, s = classementJoueur(d.joueur, sexe, profondeur - 1, details_profondeur)
  File "C:\Python27\palmares.py", line 479, in classementJoueur
    nc, harm, s = classementJoueur(d.joueur, sexe, profondeur - 1, details_profondeur)
  File "C:\Python27\palmares.py", line 495, in classementJoueur
    cl, harm = calculClassement(myV, myD, sexe, joueur.classement, champ, impression)
  File "C:\Python27\classement.py", line 583, in calculClassement
    classementPropose = classementPropose1erTour( myVictoires, myClassement )
  File "C:\Python27\classement.py", line 451, in classementPropose1erTour
    grosse = plusGrosseVictoire( myVictoires )
  File "C:\Python27\classement.py", line 418, in plusGrosseVictoire
    sorted = sortVictoires( myVictoires )
  File "C:\Python27\classement.py", line 398, in sortVictoires
    return sorted(myVictoires, key=lambda v: (classementNumerique[v[0]], v[2]), reverse=True)
  File "C:\Python27\classement.py", line 398, in <lambda>
    return sorted(myVictoires, key=lambda v: (classementNumerique[v[0]], v[2]), reverse=True)

KeyError: u'Top'

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 57 minutes, Yusuke118 a dit :

pouvoir récupérer le détail du calcul et l'écrire sur la fin.

On peut aussi piper (rediriger) le résultat danst un fichier: ./commande >fichier.txt

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 15 minutes, trollix a dit :

On peut aussi piper (rediriger) le résultat danst un fichier: ./commande >fichier.txt

Oui mais c'est pas pratique et pendant ce temps là tu ne vois pas ce qu'il se passe sur la console.

J'ai plus vite fait de copier-coller le resultat et de le mettre manuellement dans le fichier créé par le script

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Yusuke118 a dit :

Tu l'as corrigé ou pas ?

Car en python27 j'ai eu une erreur sur un calcul d'un joueur en profondeur 3 (avec un joueur du Top100 dans les palmares récupérés) qui remonte une erreur de type KeyError: u'Top'

 

@Nicolas j'ai relancé le meme calcul en profondeur 3 via la version portée pour Python3 ( avec Python3.7.4 ) et c'est passé. Tu as corrigé le bug dans tes versions palmares.py/classement.py pour Python3 mais pas celles pour Python2 ou c'est autre chose ?

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 3 minutes, Yusuke118 a dit :

Oui mais c'est pas pratique et pendant ce temps là tu ne vois pas ce qu'il se passe sur la console.

J'ai plus vite fait de copier-coller le resultat et de le mettre manuellement dans le fichier créér par le script

Et avec tee:

$ ls -a | tee output.file

$ ./commande.py | tee resultat.txt

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
à l’instant, trollix a dit :

Et avec tee:

$ ls -a | tee output.file

$ ./commande.py | tee resultat.txt

Je suis sous windows là et la plupart des classimiens sont sous Windows ou MAC. Il faut une solution qui convienne à tout le monde.

sous windows faut soit récupérer la commande sous forme d'Unix-like ou bien utiliser un environnement type Cygwin ou encore une VM Linux...

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 2 minutes, Yusuke118 a dit :

Je suis sous windows là et la plupart des classimiens sont sous Windows ou MAC. Il faut une solution qui convienne à tout le monde.

sous windows faut soit récupérer la commande sous forme d'Unix-like ou bien utiliser un environnement type Cygwin ou encore une VM Linux...

Oui, c'est palliatif, en attendant. C'est mieux de le traiter au niveau du script.

Sinon, je suis pas sous linux mais sous mac, dans le terminal, et ça marche ... ...bien. en attendant.

C'est vrai que y'a beaucoup de windows.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

ah je savais pas qu'il y avait un terminal sous MAC qui émulait un environnement unix

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 9 minutes, Yusuke118 a dit :

ah je savais pas qu'il y avait un terminal sous MAC qui émulait un environnement unix

C'est pas une émulation. :non:

Macos est bati sur un noyau unix. BSD

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 8 minutes, trollix a dit :

C'est pas une émulation. :non:

Macos est bati sur un noyau unix. BSD

Ah ben tiens j'aurais pas cru, je ne m'étais jamais penché sur la question.

Ca explique certaines choses

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 9 minutes, Yusuke118 a dit :

Ca explique certaines choses

python natif par ex. Et tout le système de droits.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 36 minutes, trollix a dit :

Oui, c'est palliatif, en attendant. C'est mieux de le traiter au niveau du script.

Sinon, je suis pas sous linux mais sous mac, dans le terminal, et ça marche ... ...bien. en attendant.

C'est vrai que y'a beaucoup de windows.

Tant pis pour eux :) 

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Yusuke118 a dit :

@Nicolas j'ai relancé le meme calcul en profondeur 3 via la version portée pour Python3 ( avec Python3.7.4 ) et c'est passé. Tu as corrigé le bug dans tes versions palmares.py/classement.py pour Python3 mais pas celles pour Python2 ou c'est autre chose ?

C’est bien le bug que tu as indiqué plus haut

J’ai fait la correction sur la branche master et je l’ai incluse dans requests et python3 aussi.

Partager ce message


Lien à poster
Partager sur d’autres sites

Mince j'ai pas suivi, où est-ce qu'on récupère la version python 3 ?

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 6 minutes, Grumms a dit :

Mince j'ai pas suivi, où est-ce qu'on récupère la version python 3 ?

https://github.com/coti/classement/archive/python3.zip

Pour info ce lien c'est celui qu'on obtient quand on sélectionne la branche souhaitée puis qu'on clique sur le bouton vert ("Clone or download") en haut à droite de https://github.com/coti/classement

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×