3
votes

Comment lire et écrire des entiers à partir d'un fichier texte?

les valeurs flottantes dans un fichier. Quand j'essaye avec .write (), il prend l'entrée comme une chaîne. Je suppose que c'est vraiment basique de Python mais je suis nouveau dans ce domaine. J'espère que vous ne vous fâcherez pas avec cette question: D

['70 \n', '60 \n', '55 \n', '75 \n', '95 \n', '90 \n', '80 \n', '80 \n', '85 \n', '100 \n']

si je lance ceci, je peux obtenir le résultat comme ci-dessous.

with open('C:/Python35/sample.txt', 'w') as f:
    data = [70, 60, 55, 75, 95, 90, 80, 80, 85, 100]
    for i in data:
        f.write('%d \n' % i)

with open('C:/Python35/sample.txt', 'r', encoding='utf-8') as g:
    data = g.readlines()

print(data)

C'est la liste des chaînes, pas les valeurs int. (Et je me demande aussi pourquoi il y a '\ n' dans la liste 'data'!)


1 commentaires

@DYZ Je comprends la confusion étant donné les titres courants mais cette question concerne la lecture / l'écriture de valeurs entières tandis que Écrire dans un fichier à partir d'une liste avec un entier Python ne concerne que la partie écriture. Je ne pense pas que ce soit une question en double.


3 Réponses :


0
votes

Le \ n que vous voyez sur la console est simplement la repr esentation par défaut de Python d'une chaîne. Si vous souhaitez écrire des lignes de données dans un fichier et imprimer un fichier ligne par ligne, vous pouvez le faire (tout ce que j'ai fait a été de parcourir votre liste et de l'imprimer une ligne à la fois au lieu d'imprimer le tableau):

with open('C:/Python35/sample.txt', 'w') as f:
    data = [70, 60, 55, 75, 95, 90, 80, 80, 85, 100]
    for i in data:
        f.write('%d \n' %i)

with open('C:/Python35/sample.txt', 'r', encoding='utf-8') as g:
    data=g.readlines()

for line in data:
    print(line)


3 commentaires

le \ n n'est pas en dehors de la représentation par défaut d'une chaîne, c'est simplement une nouvelle ligne dans le document texte.


Je veux dire que l'appel à repr (some_string) , où ce fort a de nouvelles lignes, imprimera \ n , ce qui est précisément ce qui se passe lorsque vous essayez d'imprimer un liste de chaînes.


Je crois que la nouvelle ligne est causée par l'argument de mot-clé end dans la fonction print , qui est par défaut \ n . Essayez d'appeler print (repr (6), end = "") ( docs )



0
votes

La méthode readlines () lit jusqu'à EOF en utilisant readline () et renvoie une liste contenant les lignes.

Ouvrez sample.txt avec le bloc-notes o depuis l'invite, exécutez: tapez sample.txt


0 commentaires

1
votes

Vous avez probablement votre fichier sample.txt formaté comme ceci:

>>> int("70 \n")
70
>>> type(int("60 \n"))
<class 'int'>

Il n'y a rien dans ce fichier qui se souvienne de la valeur que vous avez insérée est un entier et depuis c'est un document texte ( .txt ) il ne va pas non plus encoder les nombres comme tels. Comme pour le \ n , chaque numéro est sur sa propre ligne, ce qui signifie qu'il doit y avoir un caractère signifiant une nouvelle ligne, d'où le caractère de nouvelle ligne \ n .

Si vous regardez cette ligne dans votre code:

>>> with open("sample.txt", "r", encoding="utf-8") as g:
...     data = list(map(int, g.readlines()))
... 
>>> data
[70, 60, 55, 75, 95, 90, 80, 80, 85, 100]

vous écrivez explicitement le \ n après chaque numéro. Si vous voulez lire les nombres du fichier texte et les faire être des entiers, vous devez convertir explicitement la valeur de chaîne en sa représentation entière. Vous pouvez réécrire cette logique en:

f.write('%d \n' %i)

où elle mappera le type int sur chaque valeur de la liste renvoyée par g.readlines () puis convertissez à nouveau l'objet map en liste . Et, si vous vous posez la question, int ignore les espaces (espaces et retours à la ligne) comme vous en avez dans chaque ligne.

70
60
55
75
95
90
80
80
85
100


0 commentaires