Écrire des données entières dans un fichier texte

Fermé
Wiser99 - Modifié le 12 sept. 2022 à 19:27
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 12 sept. 2022 à 19:23

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.

A voir également:

3 réponses

yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
8 sept. 2022 à 20:24

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.

0
with open("ndp2.txt", "r+") as file:
    print(file.readline())
    file.close()

print("bonjour, choisis un nombre.")
nc = int(input(">"))
nombre_de_base = 10


with open("ndp2.txt", "w+") as file:
    file.write(nc)
    file.close()

if nc >= nombre_de_base:
    print("Vous avez séléctionné un grand nombre")
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 8 sept. 2022 à 21:14

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):
0

c'est déja le cas, la demande apparait avant l'écriture qui se situe à la fin

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168 > Wiser99
Modifié le 8 sept. 2022 à 21:18

non !

avec nc = input(), ça donne une string qui peut donc être écrite dans le fichier, alors

qu'avec nc = int(input()), on obtient un int, d'où l'erreur

ensuite, on converti la string nc en int pour comparer avec nb_de_base

0
Wiser99 > Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024
8 sept. 2022 à 21:19

oui mais j'ai besoin d'une valeur int, existe t-il une façon de transformer la valeur string 10 par exemple et la transformer en 10 int

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168 > Wiser99
Modifié le 8 sept. 2022 à 21:26

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")
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
Modifié le 12 sept. 2022 à 19:26

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 :

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Bonne chance

0