Écrire des données entières dans un fichier texte
Bonjour,
J'aimerais écrire un programme qui demande un nombre à l'utilisateur qui crée un fichier dans lequel il stocke le nombre. Ensuite, quand on relance le programme, il lit ce fichier et écrit le nombre qui avait été choisi auparavant.
Problème, le programme m'indique que je ne peux écrire que des données de type "string" alors que j'ai besoin d'une valeur de type "int" pour pouvoir ensuite le comparer dans le futur. Voici mon code :
with open("ndp2.txt", "r+") as file: print(file.readline()) file.close() print("bonjour, choisis un nombre.") nc = int(input(">")) with open("ndp2.txt", "w+") as file: file.write(nc) file.close()
Merci d'avance pour ceux qui peuvent m'aider.
- Écrire des données entières dans un fichier texte
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
3 réponses
bonjour,
une des solutions possibles, c'est de transformer les entiers en caractères.
donne peut-être en exemple complet de ce que tu veux réaliser.
Bonjour,
Ou alors faire ça avant d'écrire dans le fichier:
print("bonjour, choisis un nombre.") nc = input(">")
et ensuite, pour comparer, faire:
if(int(nc) > nb_de_base):
C'est ce que je t'explique (tu ne lis pas mes messages ...)
d'abord, on saisit nc comme string
on l'écrit dans le fichier
ensuite, on la converti en int avec int(nc), ça, ça marche :
with open("ndp2.txt", "r+") as file: print(file.readline()) file.close() print("bonjour, choisis un nombre.") nc =input(">") nombre_de_base = 10 with open("ndp2.txt", "w+") as file: file.write(nc) file.close() if int(nc) >= nombre_de_base: print("Vous avez sélectionné un grand nombre")
Bonjour,
Pour compléter la réponse de Phil, comme tu peux avoir besoin de nc sous forme d'int dans ton programme, tu peux écrire quelque chose de ce genre :
try: with open("fichier.txt", "r") as file: old_nc = int(file.readline()) except: old_nc = None if old_nc is not None: print("old_nc =", old_nc) nc = int(input(">")) with open("fichier.txt", "w") as file: print(nc, file=file)
On notera les différences suivantes :
- Pas besoin de mode r+ ou w+ : Le fichier est tantôt ouvert en écriture, tantôt en lecture et de manière exclusive. Le mode r et w sont donc suffisants.
- Ajout d'un try...except : Le bloc try ... except permet de rattraper le coup si le fichier n'existe pas encore, n'est pas lisible, ou que quelque chose ne va pas au moment d'en convertir le contenu sous forme d'entier. Si l'entier est chargé avec succès il est stocké dans old_nc. Sinon old_nc vaut None.
- Pas de close : Dans les extraits de code précédents, le fichier était explicitement fermé avec file.close().
- C'est l'intérêt de ce context manager : d'une part, le fichier est automatiquement fermé s'il a été ouvert succès.
- On ne devrait pas fermer un descripteur de fichier si le fichier n'a pas été ouvert avec succès). Ce cas de figure est également pris en charge.
- print au lieu de write : Dans les extraits de code précédents, on utilise file.write(...).
- Si nc est sous forme d'entier, on peut la transformer sous forme de chaîne avec la fonction str :
nc = 123 with open("fichier.txt", "w") as f: file.write(str(nc))
- Mais comme on peut le voir, c'est beaucoup moins naturel que directement utiliser print.
- En réalité, write ne devrait être réservé que dans les cas où le fichier f est un fichier binaire, i.e., ouvert avec open(..., "wb"). Mais si l'idée est de sauver des données dans un fichier binaire, on passerait plutôt par des modules natifs comme struct et pickle.
- Si nc est sous forme d'entier, on peut la transformer sous forme de chaîne avec la fonction str :
Bonne chance