2017-06-25 1 views
3

J'ai une question à propos de Python et Json. Je suis en train de coder un bot pour discord en utilisant discord py et je voulais avoir un fichier de configuration. Dans mon code, j'ai besoin de remplacer une chaîne d'une variable située dans un fichier Python.Remplacer la chaîne par Python dans Json

Ceci est mon code actuel:

#change prefix 
@bot.command(pass_context=True) 
async def prefix(ctx, newprefix): 
    with open("config.json", 'a+') as f: 
     stringified = JSON.stringify(json) 
     stringified.replace('"prefix" : prefix, "prefix" : newprefix') 
    await ctx.send("Prefix set to: `{}`. New prefix will be applied after restart.".format(newprefix)) 
    author = ctx.message.author 
    print(author, "has changed the prefix to: {}".format(newprefix)) 

et:

{ 
    "nowplaying":"with buttons", 
    "ownerid":"173442411878416384", 
    "prefix":"?", 
    "token":"..." 
} 

Quand j'entrez la commande: ?prefix *newprefix*, il n'y a pas de sortie dans la discorde ou le terminal, rien ne change. Quelqu'un peut-il me montrer un moyen de faire cela?

+0

Voulez-vous remplacer 'préfixe' par 'newprefix'? – zaidfazil

Répondre

3

str.replace n'est pas une opération in situ. Observez:

>>> string = 'testing 123' 
>>> string.replace('123', '') 
'testing ' 
>>> string 
'testing 123' 

Vous devrez affecter la chaîne remplacée à votre original. Donc, changer cette ligne:

stringified.replace('"prefix" : prefix, "prefix" : newprefix') 

à ceci:

+0

Lorsque je le fais: stringified = stringified.replace ('"préfixe": préfixe, "préfixe": nouveau préfixe') stringified.replace ('préfixe', 'newprefix') Il n'y a toujours pas de sortie. – incredaboy

+0

@incredaboy Vérifier ma vérification. –

0

En plus de @Coldspeed réponse qui est valide, vous devez prêter attention à la façon dont vous utilisez la fonction str.replace():

stringified.replace('"prefix" : prefix, "prefix" : newprefix') 

ici, vous passez seulement 1 argument pour remplacer: '"prefix" : prefix, "prefix" : newprefix'

Si je COMPRENDRE et correctement votre code, vous pouvez utiliser la fonction comme suit:

stringified = stringified.replace('"prefix":"?"', '"prefix":"{}"'.format(newprefix)) 

Cela fera en sorte la chaîne d'origine dans votre JSON sera remplacé. Mais au lieu d'utiliser str.replace() qui n'est pas très flexible, c'est peut-être une bonne idée d'utiliser l'expression régulière pour remplacer le string dans tous les cas, même si vous avez des espaces avant et/ou après le caractère :.

Exemple:

stringified = re.sub(r'("prefix"\s?:\s?)"(\?)"', r'\1"{}"'.format(newprefix), stringified)