Je veux analyser un fichier yaml en python. Mon fichier hosts.yaml est comme ci-dessous:yaml parse en python: SyntaxError: syntaxe invalide
access:
host: abc
hostUrl: url-for-abc
bearerToken: jjlhlj
expires: someDate
host: xyz
hostUrl: url-for-xyz
bearerToken: kdsddh
expires: someDate
Mon code python pour analyser le YAML est comme ci-dessous:
import yaml
def parse():
with open('hosts.yaml', 'r') as hosts_file:
hosts = yaml.load(hosts_file)
for host, val in hosts["access"]["host"]:
print host
print host["hostUrl"]
print host["bearerToken"]
parse()
Je reçois l'erreur suivante:
python parse_yaml.py
Traceback (most recent call last):
File "parse_yaml.py", line 19, in <module>
parse()
File "parse_yaml.py", line 13, in parse2
hosts = yaml.safe_load(hosts_file)
File "/usr/lib64/python2.7/site-packages/yaml/__init__.py", line 93, in safe_load
return load(stream, SafeLoader)
File "/usr/lib64/python2.7/site-packages/yaml/__init__.py", line 71, in load
return loader.get_single_data()
File "/usr/lib64/python2.7/site-packages/yaml/constructor.py", line 37, in get_single_data
node = self.get_single_node()
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 36, in get_single_node
document = self.compose_document()
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 55, in compose_document
node = self.compose_node(None, None)
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 127, in compose_mapping_node
while not self.check_event(MappingEndEvent):
File "/usr/lib64/python2.7/site-packages/yaml/parser.py", line 98, in check_event
self.current_event = self.state()
File "/usr/lib64/python2.7/site-packages/yaml/parser.py", line 428, in parse_block_mapping_key
if self.check_token(KeyToken):
File "/usr/lib64/python2.7/site-packages/yaml/scanner.py", line 116, in check_token
self.fetch_more_tokens()
File "/usr/lib64/python2.7/site-packages/yaml/scanner.py", line 220, in fetch_more_tokens
return self.fetch_value()
File "/usr/lib64/python2.7/site-packages/yaml/scanner.py", line 576, in fetch_value
self.get_mark())
yaml.scanner.ScannerError: mapping values are not allowed here
in "hosts.yaml", line 3, column 12
Je suis pas en mesure de comprendre, si elle est incorrecte avec la structure du fichier yaml d'un problème avec le code. Merci d'avance.
Le code que vous exécutez n'est pas le identique au code que vous avez affiché. En outre, ScannerError n'est pas une SyntaxError. –
oui ... En fait, il y avait des valeurs officielles dans le code. J'ai édité en copiant ici. –
Il n'est absolument pas nécessaire d'utiliser 'load()' de PyYAML, qui est documenté comme étant dangereux. – Anthon