0
votes

Ajout de 1 à une valeur entière dans un fichier texte, puis écrivez cette nouvelle valeur en haut de l'ancienne valeur?

J'essaie d'obtenir le nombre de sessions de golf qui ont été assistées qui existent en position de position [1] dans le fichier texte et y ajouter 1. J'ai mcupé de le faire, mais je veux maintenant mettre à jour la valeur entière. Actuellement, le programme écrit simplement la nouvelle valeur de la ligne suivante au lieu de la mise à jour.

Tom Jones,1
2


5 commentaires

Vous devez lire le fichier dans la mémoire tampon, modifier ce dont vous avez besoin et réécrire le fichier avec des données modifiées, sinon, même si vous corrigez le code, cela ne fonctionnera pas correctement au cas où si la quantité de chiffres dans le nouveau numéro est différente.


qu'est-ce que c'est pour si nawummersname == Linelist [0]


@Shubhamshaswat, n'est-ce pas évident?


@Olvinroght ok je pense comprendre maintenant, je pensais que tous les noms de la liste sont des nageurs,


Je souhaite que c'était évident :-) Je regardais à l'écran un moment. Pourriez-vous expliquer en termes simples. Je ne pense pas que je suis un million de kilomètres. J'ai mcupé d'avoir le numéro existant et j'ai ajouté 1. Il suffit de remplacer l'ancienne valeur maintenant ??


5 Réponses :


0
votes

J'utiliserais une approche comme celle-ci:

out = ""

with open("foo.txt","r+") as f:
    for line in f:
        tokens = line.split(",")
        out += tokens[0] + "," + str(int(tokens[1])+1) + "\r\n"

    f.seek(0)
    f.write(out)


0 commentaires

0
votes

Vous devrez lire ce fichier sur un tampon le modifier et l'écrire au fichier à nouveau. XXX

quelque chose comme ça.

espère que cela aide. < / p>


0 commentaires

1
votes

lire dans toutes les données dans des listes de lignes, modifier la ligne, écrire des données en arrière. J'ai choisi de créer un nouveau fichier: xxx

sortie: xxx

voir Comment écraser un fichier correctement?

Si vous devez gérer plusieurs nageurs, vous voudrez peut-être jeter un oeil à modifier la valeur spécifique dans le fichier CSV via Python également. < / p>


0 commentaires

0
votes

Cela pourrait être une autre solution:

with open("%s.txt" % month, 'r') as f:
    newfilelines = []
    filelines = f.readlines()
    for fileline in filelines:
        lineList = fileline.split(",")
        if swimmersName == lineList[0]:
            lineList[1] = int(lineList[1]) + 1
            newfilelines.append(lineList[0] + ',' + str(lineList[1]) + '\n')
with open("%s.txt" % month, 'w') as f:
    for newfileline in newfilelines:
        f.write(newfileline)


3 commentaires

F.Truncate () AttributeError: 'str' objet n'a pas d'attribut 'tronquage'


2.py ", ligne 149, dans Takeregister f.write (filelines) TypeError: écrire () argument doit être str, pas la liste


@DAVIDLAMM J'ai modifié le code pour que cela fonctionne maintenant sans problème. J'ai utilisé 2 commandes ouvertes, donc ce n'est pas 100% génial, mais cela fait le travail maintenant.



0
votes

option sans tampon à l'aide de CSV et de OS:

import csv, os

swimmersName = 'Tom Jones'
in_file = 'test.txt'

with open(in_file, newline='') as csv_reader:
    with open('temp.txt', mode='w', newline='') as csv_writer:
        reader = csv.reader(csv_reader, delimiter=',')
        writer = csv.writer(csv_writer, delimiter=',')
        for row in reader:
            if row[0] == swimmersName:
                row[1] = int(row[1]) + 1
            writer.writerow(row)

os.rename('temp.txt', in_file)


0 commentaires