avoir un txt avec le contenu: Comment supprimer le dernier tandis que vous les utilisez comme dictionnaires Pour de plus amples. Il ne peut pas être analysé à cause du dernier délimiteur. p> code: p> Je ne peux pas changer le code source. Coz j'entraîne des données d'un fichier JSON (JSON.DUMP) et crée un nouveau JSON. Y a-t-il un moyen de faire cela autre que Dump / Modification du code source p> p> , code> dans la chaîne ci-dessus? p>
4 Réponses :
string ='{hello : 1,two:three,four:five,six:seven,}'
length = len(string)
for i in range(length):
if(string[i] == ','):
string2 = string[0:i] + string[i + 1:length]
print (string2)
The output type would be a string. So, convert it to a dict later.
Et quoi s'il existe des virgules dans la valeur ou la clé E.g {"TW, O": "Trois", "Four": "fi, ve"} code>
C'est horriblement inefficace car elle répète tout le fichier texte à chaque fois qu'il trouve une virgule. En outre, cela ne fonctionnera pas quand il y a plus d'un dictionnaire.
Cela ne remplace que la dernière virgule. L'avez-vous dirigé? @Deveshkumarsingh. C'était juste une idée de la façon dont cela fonctionne pour le type (texte) que vous aviez mentionné, Selcuk. Si vous le souhaitez pour plus de dictionnaires.Je vous suggère d'écrire une fonction pour boucler tout le texte.
De plus, comment convertissez-vous votre sortie en dict plus tard? Parce que tu ne pourras pas, donnez-le d'essayer
@Akalyaraj il régénère et écrase string2 code> pour chaque virgule.
J'ai posté un autre code d'efficacité.Dans tout cas, la question implicite d'une chaîne @selcuk
@Deveshkumarsingh: Stackoverflow.com/questions/988228/...
@Akalyaraj Avez-vous essayé de la convertir vous-même? Ça ne marchera pas.
Ouais, désolé mon mauvais. Je suis essayé. Mais j'ai essayé une autre façon de fractionnement et de créer des dicts.
Votre nouvelle réponse a des problèmes aussi
import re
string ='{hello : 1,two:three,four:five,six:seven,}'
match = re.search(r'(.*),[^,]*$', string)
print (match.group(1)+"}")
Try this @selcuk for an efficient one
Peut-être préférable de mettre à jour votre réponse d'origine au lieu de créer un nouveau?
Cela supprimera la dernière clé : valeur code> paire pour les dictionnaires valides, par exemple string = '{bonjour: 1, deux: trois, quatre: cinq, six: sept, six: sept}' code>
Je suis un peu nouveau pour poster des réponses, laissez-moi essayer de le faire à partir de la prochaine fois .Merci pour la pointe
Tu m'as mal compris. Votre code supprime la dernière paire de mon exemple.
@ Selcuk, puis-je connaître l'exemple.it fonctionne toujours bien pour moi :?
Le commentaire de 25 minutes a un exemple spécifique qui produit {bonjour: 1, deux: trois, quatre: cinq} code> où il devrait produire {bonjour: 1, deux: trois, quatre: cinq, six: sept: sept} code> ne pas supprimer la dernière clé quand il n'y a pas de virgule de fuite.
Je suis désolé, je ne suis pas capable de comprendre ici. Ce code ne supprime pas la dernière touche, il suffit d'extraire les caractères avant la dernière virgule et concaténate un support à la fin. Je pense que nous allons partir à cela considérant qu'il y a déjà une bonne réponse .che-enfants
Essayez de mettre string = '{bonjour: 1, deux: trois, quatre: cinq, six: sept: sept}' code> dans votre code et vous verrez que match.group (1) + "} " code> vous donne {bonjour: 1, deux: trois, quatre: cinq} code>
Ceci supprime le dernier la sortie de < code> s code> est alors: p> , code> dans votre chaîne sans avoir besoin d'un autre importer code>'s.
Donc, vous inversez la chaîne deux fois, juste pour remplacer la dernière virgule?
En fait, oui, mais cela change simplement la représentation de la chaîne
Mais c'est un calcul supplémentaire et vraiment inefficace pour des chaînes plus longues, cela vous donne également une chaîne, mais vous ne pouvez pas l'utiliser pour créer un dictionnaire.
De cette façon, c'est la manière la plus rapide possible d'inverser les chaînes parce que vous venez de changer la représentation (voir Premier ou Deuxième )
Il est toujours o (n) code> où n est la longueur de la liste, je ne sais pas ce que vous entendez par le plus rapide ici
simple remplacer code> devrait fonctionner correctement. broken_json = '''{
hello : 1,two:three,four:five,six:seven,
bye : 42,ick:poo,zoo:bar,}'''
j = broken_json.replace(',}', '}').replace(',\n}','\n}')
Que comptez-vous faire avec le contenu une fois que vous supprimez le dernier
, code>Je gère une boucle et je n'ai pas besoin de la dernière, besoin de supprimer cela pour une analyse ultérieure
Pouvez-vous ajouter ce code aussi où vous analysez ces chaînes
Quel format est le fichier txt, personnalisé? Est-ce que vous analysez JSON avec regex?
Construire une carte JSON aléatoire dans un format particulier en vrac à l'aide de Faker Lib. Donc nécessaire de supprimer le dernier,
Je pense que c'est mieux si vous corrigez le problème à la source, car ce que vous avez n'est pas une chaîne JSON valide, corrigez donc votre source pour générer des chaînes JSON correctes.
Juste une tête de tête - cela échouera également parce que les noms de propriété ne sont pas cités.
Je pense que ce problème devrait être résolu à la source. Comment créez-vous ce fichier? Si vous le faites correctement, pas besoin de passer à travers tout cela.
Si vous avez un contrôle du code qui produit les fichiers - vous devez le corriger pour produire des Jsons valides
il suffit de le changer en
{"bonjour": 1, "deux": "trois", "quatre": "cinq", "six": "sept"} code> résoudra votre problèmeSi j'essaie d'analyser le fichier / enlever le dernier délimiteur (,) avec regex, cela pourrait-il causer un PRBLM? besoin de suggestions.
Votre problème consiste à générer le JSON. Placez vos données dans une structure correcte (dict ou liste) et utilisez
json.dump () code>Je ne peux pas changer le code source. Coz j'entraîne des données d'un fichier JSON (JSON.DUMP) et crée un nouveau JSON. Y a-t-il un moyen de faire cela autre que Dump / Modification du code source
Bien quelle que soit la regex que vous puissiez trouver sera complexe et peut casser si pas complètement testé
Oh .. ok vl lui donner un essai.
Chaque fois que je le génère. Le délimité serait deuxième de la dernière fois dans le JSON. Peut-être si ICAN trouve un moyen de supprimer le dernier second caractère du fichier. Cela peut fonctionner . Aucune suggestion ? @Deveshkumarsingh
Vous pouvez utiliser un analyseur JSON alternatif tel que github.com/dmeranda/demjson qui peut analyser invalide < Code> JSON code> (Consultez l'option
allow_troger_comma code>)Ce serait une autre question, où vous nous montrez le code qui génère ces JSON
Dupliqué possible de Comment décoder une chaîne JSON non valide dans Python