Premier programme en python
Bonjour,
Je me suis mis très récemment à apprendre python.
Après avoir fait plusieurs "hello world", j'ai entrepris de re-coder mon petit script shell qui permet de changer mon fond d'écran qui n'est pas très bien adapté (car la séquence des images est toujours la même et non aléatoire).
Le but étant de lister les images d'un répertoires, les stocker dans un tableau associatif contenant le chemin vers l'image, un numéro d'image qui commence à 0 et un status (true/false). Le status me permet de savoir que l'image a déjà été utilisée et donc une autre image est choisie. Le script étant lancé par crontab, je stock le tableau dans un fichier xml qui est repris au prochain lancement du job.
J'ai réussi à faire tout ça (non sans mal, mais j'ai mis environ une semaine pour comprendre, chercher les infos, la syntaxe etc).
Mon problème vient du fait que si le script a passé toute les images (donc elles ont toutes le status true), il faut que je relance une nouvelle liste pour remettre tous les status à false et donc prendre en compte les nouvelles images ajoutées au dossier. Et là, je sèche.
voilà la fonction qui gère les status:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| ...
...
# return a random background
def get_item(files):
item = random.randrange(len(files))
for fic, status in files[item].iteritems():
if status == "false":
files[item] = {fic: "true"}
root_element = ET.Element("my_list")
for i in files:
for j,k in files[i].iteritems():
child = ET.Element("img")
child.attrib["id"] = str(i)
child.attrib["file"] = j
child.attrib["status"] = k
root_element.append(child)
#print i,j,k
tree = ET.ElementTree(root_element)
tree.write(tmp_path + "/" + list_file)
return fic
else:
return 0
...
...
# main program #
# populate the list
files = get_list_from_file(img_path)
# get a random file
item = 0
while item == 0:
item = get_item(files)
# set background
print item
#set_wallpaper(item)
...
... |
En fait il faudrai que je vérifie dans le tableau de la fonction get_item si tous les status sont à true avant de pouvoir relancer une nouvelle liste. Existe t il une super fonction qui me permette de faire ça ?
J'espère m'être bien exprimé.
Merci d'avance pour votre aide :)