Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pickle d'un fichier vide ?

5 réponses
Avatar
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

5 réponses

Avatar
hg
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()

Avatar
hg
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

Avatar
bubu
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
Avatar
Cémoi
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 ....

Avatar
Pierre Quentel
On 25 avr, 21:38, 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


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