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'))
4 Réponses :
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}
.
.
.
]
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.
À condition que les éléments internes soient valides JSON, ce qui suit pourrait fonctionner. J'ai creusé le Source de SimpleJson Code> Library A> et la modifier en fonction de votre cas d'utilisation. Un SSCCE est ci-dessous. > {'hello': ['world', 'hell', {'test': 'haha'}]}
> {'hello': ['world', 'hell', {'test': 'haha'}]}
> {'hello': ['world', 'hell', {'test': 'haha'}]}
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 code>, fonction (argument11) code>, 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.
É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é Le suivant se lit et le transforme en une liste de python de Dictionnaires composés de touches alphanumériques et de valeurs: p> sortie: p> doc.txt code>: p>
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()
Quelle erreur obtenez-vous?