0
votes

Existe-t-il un moyen de rechercher une clé dans un fichier .txt et de mettre à jour sa valeur à Python 3.7?

Edit: J'ai pris les conseils de Jighdan et j'ai commencé à utiliser des fichiers JSON. Cela semble fonctionner! Les opérations que vous pouvez faire avec le paquet JSON incluent beaucoup de ce dont j'avais besoin. Merci pour les réponses à tous!

Par exemple, j'ai un fichier qui ressemble à ceci. P> xxx pré>

Je veux pouvoir recevoir des données telles que C3: 21,40 et recherchez le fichier pour C3 et le mettre à jour afin que le fichier ressemble à ceci. p> xxx pré>

Si la clé n'existe pas, par exemple je reçois C5: 32,11, il ajoute une nouvelle ligne comme celle-ci. P>

import fileinput  
text_to_search = 'hello'  
replacement_text = 'good by'  
with fileinput.FileInput('TEST.txt', inplace=True, backup='.bak') as file:     
     for line in file:         
          print(line.replace(text_to_search, replacement_text), end='')


2 commentaires

A Pour texte dans et remplacer le sous ou le texte complet doit fonctionner! Qu'est-ce que tu as essayé jusque-là?


Ceci est le plus proche que j'ai obtenu importer fichierInput texte_to_search = 'Hello' remplacement_text_text = 'bon par' avec fichierInput.fileinput ('Test.txt', emplacement = true, sauvegarde = "BAK") en tant que fichier: Ligne dans Fichier: Imprimer (ligne.replace (text_to_search, remplacement_text), end = '') mais il remplace tout le texte. Ne pas mettre à jour la valeur comme je veux.


3 Réponses :


0
votes

Ceci est certainement possible. Votre fichier texte a déjà la forme d'un dictionnaire, alors, lorsque vous le lisez, mettez simplement les données dans un dictionnaire. Ensuite, vous pouvez facilement remplacer ou ajouter des touches au dictionnaire et écrivez le dictionnaire dans le fichier dans le format de chaîne d'origine.

quelque chose comme ceci: p>

input = 'C3:32,11'

with open('text.txt', 'r') as f:
    # build dictionary
    d = {}
    for str in f.readlines():
        key, value  = str.split(':')
        d[key] = value.strip()
    ikey, ivalue = input.split(':')     # user input also has to be split
    d[ikey] = ivalue.strip()

with open('text.txt', 'w') as f:
    # stringify
    for key, value in d.items():
        f.write(':'.join([key, value]) + '\n')


0 commentaires

0
votes

My Toile:

checker = 'C6:32,11'
present = False
new_file = []

with open('change.txt', 'r') as f:
    for line in f:
        if checker[:2] == line[:2] and checker[3:] is not line[3:]:
                new_file.append(line.replace(line[3:].strip('\n'), checker[3:]))
                present = True
        else:
            new_file.append(line)

with open('change.txt', 'w') as f:
    f.writelines(new_file)
    if not present:
        f.writelines('\n')
        f.writelines(checker)


0 commentaires

0
votes

solution avec l'utilisation de Lambda et compréhension de la liste

input = 'C3:32,11'

with open('test.txt', 'r') as f:
    head = lambda x: x[0:x.find(':')]  # get head of line from 0 to position of :
    # use if ... else list comprehension and save output in box
    box = [input + '\n' if head(line) == head(input) else line for line in f.readlines()]

with open('test.txt', 'w') as f:
    [f.write(line) for line in box]  # overwrite test.txt with content of box


0 commentaires