Gestion de fichier python

Fermé
CriSraline Messages postés 6 Date d'inscription samedi 22 mai 2021 Statut Membre Dernière intervention 22 juin 2022 - Modifié le 2 juin 2022 à 16:20
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 2 juin 2022 à 16:32
Bonjour,

Je souhaiterais savoir s'il est possible de supprimer une ligne de code dans un fichier python grâce à une ligne de code en python.

Ce que je veux dire par là, c'est que j'ai ça dans une partie de mon code ou c'est une sorte de petit questionnaire avec du
tkinter
dedans :

nb_erreur = str(nb_erreur)
save = open("réponse.txt","r")
lignes = save.readlines()
save.close()
   
lignes[0]= nb_erreur + "\n"
   
save = open("réponse.txt","w")
save.writelines(lignes)
save.close()
nb_erreur = int(nb_erreur)
print(nb_erreur)


... et je souhaiterais faire en sorte que dès le moment même ou la fenêtre
tkinter
se ferme, ces quelques lignes soit supprimées de mon code afin d'éviter que la personne reprennent le programme pour modifier la valeur et tricher :D

Je vous remercie d'avance pour vos précieuses réponses même si elles sont négatives (sur la question bien évidement pas sur moi q-q)

A voir également:

2 réponses

MathKode Messages postés 25 Date d'inscription mardi 25 février 2020 Statut Membre Dernière intervention 10 juin 2022 6
Modifié le 2 juin 2022 à 16:21
Le problème avec la suppression de ligne c'est qu'on ne peut pas l'inverser.
Voici un code qui le fait (sans inverser) :

def end():
    #Recupere le contenu
    file = open("<CODE>.py","r")
    contenu = file.read().split("\n")
    file.close()

    #Supprime les 10 premieres lignes
    for i in range(10):
        del contenu[0]

    #Sauvegarde le nouveau fichier (et écrase l'ancien)
    file = open("<CODE>.py","w")
    file.write("\n".join(contenu))
    file.close()



Pour retrouver le code original, je te conseille de te tourner vers la cryptographie...

0
CriSraline Messages postés 6 Date d'inscription samedi 22 mai 2021 Statut Membre Dernière intervention 22 juin 2022
2 juin 2022 à 13:19
Premièrement, Merci de ta réponse :D

Et ensuite c'est pas un problème si on peut pas l'inverser je garderai un fichier de sauvegarde au cas ou c'est le but que la suppression de mes lignes ne soient pas inversible :D Si le code le fait parfaitement ça ne te dérange pas que je le pique :D ?

Et dernière petite question je vois dans ta boucle for que le fichier va supprimer les 10 premières lignes de mon fichier ^^ je peux pas faire en sorte de supprimer seulement les lignes que je veux et non les x premières lignes ?

Et merci pour la cryptographie je viens de regarder et ça à l'air très intéressant je vais plus me tourner sur ça je oense

Merci :D
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
2 juin 2022 à 16:32
Bonjour,

Personnellement je n'ai pas vraiment compris ton problème, sans doute car tu n'as pas expliqué à quelle moment
réponses.txt
était lu (au chargement de l'application), qui l'avait créé, et son rôle une fois l'application fermée.

En outre, quel est l'intérêt de sauver des données sur le disque dur si tu ne veux pas qu'elles soient lues ? Pourquoi ne pas juste les garder en mémoire ?

Si tu as besoin de les charger au prochain lancement du programme, comment espérer les retrouver si tu ne peux pas les charger depuis un fichier ?

Concernant la cryptographie, ça peut être une solution "limitante" mais pas bloquante dans l'absolu, car un fichier python est lisible, donc la technique de chiffrement / chiffrement est probablement reproductible en dehors du programme. Si tu veux une solution "limitante" pour la majorité des utilisateurs, tu pourrais te contenter de sauver tes données sous formes binaires (e.g., avec
pickle
ou
dill
) plutôt qu'utiliser un format texte.

Concernant le code de ton premier message, pour un code plus propre, on gère les ouvertures de fichiers au sens large (ce qui inclue, comme dans ton cas, les fichiers réguliers, mais également les sockets) dans un context manager (via l'instruction
with
) afin de garantir que tout est fermé quand il faut et s'il le faut (notamment en cas d'exception).

lines = None
with open("mon_fichier.txt", "r") as f:
    lines = f.readlines()
print(lines)


Plutôt qu'utiliser la méthode
write
, on peut aussi écrire dans un fichier comme on le ferait avec la sortie standard à l'aide de
print
:

with open("mon_fichier.txt", "w") as f:
    print("Hello", file=f)


Bonnne chance
0