pickle d'un fichier vide ?

Le
bubu
bonjour,

est ce qu'il y a une technique pour charger un fichier avec pickle (
pickle.load ) qui fonctionne dans les deux cas suivants :

- le fichier n'existe pas encore et il faut le créer
- le fichier existe et contient une liste

je saurais le faire en moultes lignes, mais je me demandais si il n'y a
avait pas déjà une fonction "built in"

merci d'avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
hg
Le #609730
bubu wrote:

bonjour,

est ce qu'il y a une technique pour charger un fichier avec pickle (
pickle.load ) qui fonctionne dans les deux cas suivants :

- le fichier n'existe pas encore et il faut le créer
- le fichier existe et contient une liste

je saurais le faire en moultes lignes, mais je me demandais si il n'y a
avait pas déjà une fonction "built in"

merci d'avance



J'ai répondu à une question qui me semble équivalente sur un autre NG:

You can run this small script a few times to see that the file does not get
deleted

hg

import shelve


class Grades:
def __init__(self):
self.GRADES = 'GRADES'
self.m_gdb = shelve.open('MYGRADES.dat')

try:
self.m_grades = self.m_gdb[self.GRADES]
except:
self.m_grades = []
self.m_gdb[self.GRADES] = self.m_grades

self.m_gdb.close()

def Add(self, p_grade):
self.m_gdb = shelve.open('MYGRADES.dat')
self.m_grades.append(p_grade)
self.m_gdb[self.GRADES] = self.m_grades
self.m_gdb.close()

def Grades(self):
return self.m_grades

l_o = Grades()
print l_o.Grades()
l_o.Add(10)
print l_o.Grades()

hg
Le #607604
bubu wrote:

ok, merci pour la réponse, même si j'ai pas trop compris mais bon..



Je te conseille de lire la doc du module shelve (module qui joint les
fonctions de pickle et celles d'une petite bases de donnée).

hg

bubu
Le #606743
ok, merci pour la réponse, même si j'ai pas trop compris mais bon..

j'aurais une autre question, j'arrive pas du tout à utiliser
writelines() avec python 2.4.3

par exemple

f = open("toto.txt","w")
toto=["1","2","3"]
f.writelines(toto)
f.close

pas de message d'erreurs, mais riend ans le fichier non plus..

merci d'avance
Cémoi
Le #607603
ok, merci pour la réponse, même si j'ai pas trop compris mais bon..

j'aurais une autre question, j'arrive pas du tout à utiliser
writelines() avec python 2.4.3

par exemple

f = open("toto.txt","w")
toto=["1","2","3"]
f.writelines(toto)
f.close



Et si tu mettais des parenthèses après 'close' ?


pas de message d'erreurs, mais riend ans le fichier non plus..


Si tu avais lancé ton code en mode interactif, tu aurais vu un message
du genre <built-in method close of file object at 0x024A5D58>

merci d'avance


2 rien ....

Pierre Quentel
Le #607601
On 25 avr, 21:38, bubu
bonjour,

est ce qu'il y a une technique pour charger un fichier avec pickle (
pickle.load ) qui fonctionne dans les deux cas suivants :

- le fichier n'existe pas encore et il faut le créer
- le fichier existe et contient une liste

je saurais le faire en moultes lignes, mais je me demandais si il n'y a
avait pas déjà une fonction "built in"

merci d'avance


Bonjour,

Il n'y a pas de méthode pour cela dans les modules pickle ou cPickle.
On peut le faire de cette façon :

========================
import os
import cPickle

def load_or_create(file_name):
if not os.path.exists(file_name):
f=open(file_name,'wb')
cPickle.dump([],f)
f.close()
return cPickle.load(open(file_name,'rb'))

print load_or_create('test')
=======================

en supposant que si le fichier n'existe pas, on le crée en mettant
dedans une liste vide

A+
Pierre

Publicité
Poster une réponse
Anonyme