8
votes

Comment lire plusieurs dictionnaires d'un fichier à Python?

Je suis relativement nouveau à Python. J'essaie de lire un fichier ASCII avec plusieurs dictionnaires. Le fichier a le format suivant.

data = json.load(open('doc.txt'))


1 commentaires

Quelle erreur obtenez-vous?


4 Réponses :


1
votes

Vous devrez le mettre dans une grande liste afin de le faire fonctionner. I.e.

[
    {key1: val1, key2: val2, key3: val3, ...keyN: valN}
    , {key1: val1, key2: val2, key3: val3, ...keyN: valN}
    , {key1: val1, key2: val2, key3: val3, ...keyN: valN}
    .
    .
    .
]


1 commentaires

Cela ne fonctionnera pas. Il n'y a pas de virgules entre les dictionnaires. Il n'y a pas de virgule entre les paires de la valeur clé dans un dictionnaire.



3
votes

3 commentaires

Fonctionne parfaitement merci beaucoup, j'apprécie vraiment.


J'ai quelques valeurs dans le dictionnaire qui sont des fonctions. Par exemple '{Key11: fonction (argument11) Key12: {dict11}} {Key21: fonction (argument12) Key22: {dict21}}' est-il possible d'étendre votre code pour lire ces dictionnaires.


Pouvez-vous donner un exemple plus clair? Peut être une version concise de données réelles. Dans votre Key11 , fonction (argument11) , il est très difficile de distinguer la structure de vos données d'origine - contient-elle des citations? Contient-il des virgules? Les fonctions doivent être invoquées, etc. .. Vous devez modifier votre question et mettre à jour avec l'exemple d'entrée et de sortie.



2
votes

Étant donné que les données de votre fichier d'entrée ne sont pas vraiment dans le format littéral JSON ou Python Object, vous aurez besoin de l'analyser vous-même. Vous n'avez pas vraiment précisé ce que les clés et les valeurs admissibles sont dans le dictionnaire, ce qui suit ne leur permet que d'être des chaînes de caractères alphanumériques.

Donc, donné un fichier d'entrée avec le contenu suivant nommé doc.txt : xxx

Le suivant se lit et le transforme en une liste de python de Dictionnaires composés de touches alphanumériques et de valeurs: xxx

sortie: xxx


0 commentaires

0
votes
import re

fl = open('doc.txt', 'rb')

result = map(
    lambda part: dict(
        re.match(
            r'^\s*(.*?)\s*:\s*(.*?)\s*$', # splits with ':' ignoring space symbols
            line
        ).groups()
        for line in part.strip().split('\n') # splits with '\n', new line is a new key-value
    ),
    re.findall(
        r'\{(.*?)\}', # inside of { ... }
        fl.read(),
        flags=re.DOTALL # considering '\n'-symbols
    )
)

fl.close()

0 commentaires