• [^] # Re: Intuitivement...

    Posté par (site web personnel) . En réponse au message Problème de doublons dans un fichier txt. Évalué à 5.

    Avec un peu d'imagination les solutions sont nombreuses :

    • Comme suggéré au dessus tu passes le nom du fichier en paramètre, tu récupères la dernière ligne (par exemple http://stackoverflow.com/questions/3346430/most-efficient-way-to-get-first-and-last-line-of-file-python ) et tu n'écris que si la nouvelle ligne est différente.
    • Tu stockes les dernières valeurs dans un fichier caché (bon dans l'absolu, pour faire les choses proprement, il faudrait faire attention et prévoir les cas où le script est lancé plusieurs fois en parallèle), tu lis les nouvelles valeurs, et si elles sont égales aux anciennes tu renvoies 'N/A' (même si un simple None ferait l'affaire mais c'est une autre histoire).
    • Plutôt qu'un script lancé par cron, tu fais un daemon qui tourne en permanence (et peut garder les dernières valeurs dans une variable). ici c'est sûrement overkill, mais si voulais faire un truc plus intelligent qui se met par exemple à lire les valeurs plus souvent s'il s'aperçoit qu'elles changent rapidement (grosse fuite :) ) ça serait une piste.

    Sinon quelques remarques sur ton code:

    i=0
    for test_output in range(10):
     i+=1
     ...

    s'écrit en Python idiomatique:

    for i, test_output in enumerate(range(10), start=1):
     ...
    f = open(sensorFile, "r")
    text = f.read().strip()
    f.close()

    gagnerait à être écrit (plus court, le fichier est fermé même en cas d'erreur):

    with open(sensorFile, "r") as f:
     text = f.read().strip()

    Ça serait mieux que tes tas de text.split("\n") soit fait une seule fois au début et stocké dans une variable.
    Il n'y a pas besoin de 'parenthéser' les return ou les if.
    '/'+str(cptA)+'/'+str(cptB)+'/'+str(i) devient en plus concis/lisible (et plus rapide je pense) '/%s/%s/%s' % (cptA, cptB, i) (les string ont aussi une méthode format() mais je suis resté à mes vieilles habitudes).
    Ça fait longtemps que <> est obsolète au profit de !=.