Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/01/2013, à 11:57

KoZzY

[RESOLU] Python - Pickle introuvable

Bonjour à tous,

J'ai une question toute bête, connaîtriez vous une alternative au module "Pickle" car j'ai beau importer ce dernier, Python semble ne pas vouloir me laisser l'utiliser:

Voici un essai:

import pickle

with open ("texte","wb") as f:
        lol = "caca boudin"
	pickpick = pickle.Pickler(f)
	pickpick.dump(lol)
        f.close()
 

       

Tadaaaaam:

name 'pickle' is not defined

Des fois ça marche, des fois ça ne marche pas ... J'aime bien l'idée de l'aléatoire mais faut pas pousser big_smile
Ou alors si vous pouviez me donner les conditions à respecter impérativement pour faire fonctionner ce module (ou les problèmes les plus fréquemment rencontrés), ça m'aiderait beaucoup car je ne trouve pas la documentation en rapport aux questions que je me pose.

Désolé pour cette question de noob mais merci d'avance pour vos réponses de pro tongue

Dernière modification par KoZzY (Le 17/01/2013, à 13:06)

Hors ligne

#2 Le 17/01/2013, à 12:25

pingouinux

Re : [RESOLU] Python - Pickle introuvable

Bonjour,
Ton script semble correct (f.close() n'est pas obligatoire avec with open......... as f). Il faut aussi éviter de mélanger les indentations (tabulation pour les unes, espaces pour les autres), mais ce n'est pas en cause ici.
Comment lances-tu le script ? Les comportements aléatoires ont-ils lieu sur la même machine ?

Hors ligne

#3 Le 17/01/2013, à 12:40

KoZzY

Re : [RESOLU] Python - Pickle introuvable

Merci pour ces précisions (je ne savais pas pour le f.close())... Je vais vite coder un autre exemple (je ne fais que des petites parcelles de code pour apprendre à utiliser les fonctions des modules que je découvre):

#!/usr/bin python
# -*-coding: utf-8 *-

from getpass import getpass
from pickle import *

n = int(123)
box_open = True
reponse = "l"
liste = ["y","yes","n","no"]
password = int(0)
while box_open == True:
	try:
		password = int(getpass("Pass: "))
		print "Sure ? "
		reponse = raw_input("Y/N: ").lower()
		if reponse in liste[0:2]:
			with open ("code","wb") as fichier_texte:
				pick = pickle.Pickler(fichier_texte)
				pick.dump(password)
				box_open = False
		elif reponse in liste[2:4]:
			print "Retry...\n"
		else: 
			print "Y/Yes or N/no"
	except ValueError:
		print "Int = Valeur numérique !"
		continue

L'autre code fonctionne à tous les coups maintenant mais celui-ci me pose problème et je ne comprends pas pourquoi (nan sérieux, ne vous moquez pas de moi xD).

Pour lancer le "programme" (si on peut appeler ça comme ça) j'utilise la fonction Exécuter (F5) de Geany. Sinon je peux aussi le lancer dans un terminal avec: Python fichier.py ça revient au même.
Et oui, tout est sur la même machine.

ps: Tabulation pour les uns, espace pour les autres ? Ah bon ?! Quand dois-je utiliser un espace plutôt qu'une tabulation ? Merci =]

Dernière modification par KoZzY (Le 17/01/2013, à 12:47)

Hors ligne

#4 Le 17/01/2013, à 12:56

pingouinux

Re : [RESOLU] Python - Pickle introuvable

Dans ton script en #3, il y a trois choses qui ne vont pas :

  1. La 1ère ligne doit être
    #!/usr/bin/python

  2. Si tu fais

    from pickle import *

    il faut l'utiliser ainsi

    				mon_pickler = Pickler(fichier_texte)

    Si tu fais

    import pickle

    il faut l'utiliser ainsi

    				mon_pickler = pickle.Pickler(fichier_texte)
  3. ferme_valise() n'est pas définie

Ajouté :

Quand dois-je utiliser un espace plutôt qu'une tabulation ?

Peu importe, mais dans un même bloc, il vaut mieux éviter les mélanges (erreur en python3). Je trouve plus commode de n'utiliser que les espaces, mais chacun fait comme il veut.

Dernière modification par pingouinux (Le 17/01/2013, à 12:59)

Hors ligne

#5 Le 17/01/2013, à 13:05

KoZzY

Re : [RESOLU] Python - Pickle introuvable

Problème résolu, grâce à toi !!! Merci =]

ferme_valise() est bel et bien défini mais j'ai volontairement retiré cette fonction du code avant de l'afficher ici pour rester concentré sur le problème principal de Pickler wink

C'était bien à cause de l'importation et de mon utilisation du module, là j'ai fait:

from pickle import *

mon_fichier.Pickler(password) #-- Ne pas oublier la majuscule à "Pickler"

et ça fonctionne à merveille, encore merci big_smile

Je ferai plus attention aux espacements alors !

Hors ligne