2 votes

Ayant un problème pour changer la valeur d'un document texte

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

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()

le code d'erreur est:

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

1voto

melvin Points 1597

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

De plus, vous devez utiliser .read() pour lire les données du fichier et les stocker dans la variable content.

  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()

1voto

blhsing Points 57682

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

Changer:

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

à:

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

0voto

TrebledJ Points 7190

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'addition en utilisant l'opérateur + n'est pas supportée entre ces deux types.

Ce que la fonction open fait est de retourner un objet fichier. Vous devez lire vos données du fichier d'abord.

file = open("Rows.txt", "r")
exel_rows = file.read()  # lire les données du fichier

print(exel_rows) # afficher le contenu (à des fins de débogage et autres)

exel_rows = int(exel_rows) + 1

# continuer normalement

0voto

taurus05 Points 1444

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 converti en un int, vous pouvez faire quelque chose comme ceci :

f = open('temp.txt', 'r')   # Ouvrir le fichier en mode lecture, pour lire le contenu du fichier.
f.seek(0)  # Si quelque chose comme 2324 est stocké alors placer le curseur au début
value = f.readlines()  # Si la valeur entière s'étend sur plusieurs lignes (comme un nombre de 100 chiffres, alors lire toute la ligne)
value = int(value[0]) + 1  # Mettre à jour la valeur et la stocker à nouveau
f.close()  # fermer cette instance 

f = open('temp.txt', 'w')  # le rouvrir en mode écriture pour écraser le contenu existant.
f.write(str(value))  # replacer les résultats dans le fichier.
f.close()  # fermer également cette instance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X