2
votes

Avoir un problème avec la modification de la valeur d'un document texte

J'essaie d'ouvrir un fichier appelé "rows.txt" et de changer la valeur en + 1 chaque fois que le code est exécuté.

Traceback (most recent call last):
  File "C:\Users\Fletcher\Desktop\Bank.py", line 158, in <module>
    exel_rows = exel_rows + 1
TypeError: unsupported operand type(s) for +: '_io.TextIOWrapper' and 'int'

le code d'erreur est:

exel_rows = open("Rows.txt", "r")

  exel_rows = exel_rows + 1

  exel_rows = str(exel_rows)

  saveFile = open('Rows.txt', 'w')
  saveFile.write(exel_rows)
  saveFile.close()


3 commentaires

Quel est le contenu du fichier?


le contenu du fichier est juste le caractère "1"


Vérifiez ma réponse. Ça marche


4 Réponses :


1
votes

Je pense que vous ajoutez un nombre à une chaîne. Essayez donc le code ci-dessous, int () convertira la chaîne en entier.

Vous devez également utiliser .read () pour lire les données du fichier et les stocker dans un contenu variable.

  exel_rows = open("Rows.txt", "r")
  exel_rows = exel_rows.read();
  exel_rows = int(exel_rows) + 1
  exel_rows = str(exel_rows)
  saveFile = open('Rows.txt', 'w')
  saveFile.write(exel_rows)
  saveFile.close()


3 commentaires

Traceback (dernier appel le plus récent): File "C: \ Users \ Fletcher \ Desktop \ Bank.py", ligne 156, dans exel_rows = int (exel_rows) + 1 TypeError: int () l'argument doit être une chaîne, un objet de type octets ou un nombre, pas '_io.TextIOWrapper'


@MarkIngram Voir ma réponse mise à jour. Vous devez utiliser exel_rows.read ();


@MarkIngram Heureux de vous aider. Pouvez-vous voter pour ma réponse? Quelqu'un a voté contre. je ne sais pas pourquoi



1
votes

Vous devriez lire le contenu du fichier avant d'ajouter le numéro:

Remplacez:

exel_rows = open("Rows.txt", "r").read()
exel_rows = int(exel_rows) + 1

par:

exel_rows = open("Rows.txt", "r")
exel_rows = exel_rows + 1

p>


2 commentaires

Traceback (dernier appel en dernier): Fichier "C: \ Users \ Fletcher \ Desktop \ Bank.py", ligne 155, dans exel_rows = int (exel_rows) + 1 ValueError: littéral invalide pour int () avec base 10 : ''


À peu près sûr que le contenu de votre Rows.txt n'est pas seulement un caractère 1 alors.



0
votes

Le message d'erreur vous indique ce qui ne va pas:

  1. exel_rows est de type _io.TextIOWrapper
  2. 1 est de type int
  3. L'ajout à l'aide de l'opérateur + n'est pas pris en charge entre ces deux types.

La fonction open renvoie un objet fichier. Vous devez d'abord lire vos données à partir du fichier.

file = open("Rows.txt", "r")
exel_rows = file.read()  # read the data from the file

print(exel_rows) # print the contents (for debugging purposes and whatnot)

exel_rows = int(exel_rows) + 1

# continue as normal


3 commentaires

cela crée le code d'erreur de: Traceback (dernier appel le plus récent): File "C: \ Users \ Fletcher \ Desktop \ Bank.py", ligne 158, dans exel_rows = int (exel_rows) + 1 ValueError: invalide littéral pour int () avec base 10: ''


@MarkIngram Hmm ... ce message d'erreur semble incomplet. Normalement, cela lèverait ValueError: littéral invalide pour int () avec base 10: 'xxx' . Pouvez-vous essayer de déboguer le contenu de votre fichier?


le seul contenu du fichier est le caractère "1"



0
votes

En supposant que le nom du fichier est temp.txt , qui contient une valeur dont le type de données est str , qui peut être convertie en un int , vous pouvez faire quelque chose comme ceci:

f = open('temp.txt', 'r')   # Open the file in read Mode, to read the contents of the file.
f.seek(0)  # If something like 2324 is stored then place the place the cursor to the beginning
value = f.readlines()  # If the integer value spans over multiple lines (like 100 digit number, then read the whole line)
value = int(value[0]) + 1  # Update the value and store it back
f.close()  # close this instance 


f = open('temp.txt', 'w')  # reopen it in write mode to overwrite the existing contents.
f.write(str(value))  # place the results back into the file.
f.close()  # close this instance also.


0 commentaires