PyYAML dump format

Je sais qu'il y a quelques questions à propos de ce sur, mais je ne pouvais pas trouver ce que je cherchais.

Je suis en utilisant pyyaml à lire (.load()) un .yml fichier, de modifier ou d'ajouter une clé, puis l'écrire (.dump()) de nouveau. Le problème est que je veux garder le format de fichier de post-décharge, mais il change.

Par exemple, j'ai modifier la clé en.test.index.few - à-dire "Bye" au lieu de "Hello"

Python:

with open(path, 'r', encoding = "utf-8") as yaml_file:
    self.dict = pyyaml.load(yaml_file)

Puis, après la modification de la clé:

with open(path, 'w', encoding = "utf-8") as yaml_file:
    dump = pyyaml.dump(self.dict, default_flow_style = False, allow_unicode = True, encoding = None)
    yaml_file.write( dump )

Yaml:

Avant:

en:
  test:
    new: "Bye"
    index:
      few: "Hello"
  anothertest: "Something"

Après:

en:
  anothertest: Something
  test:
    index:
      few: Hello
    new: Bye

Est-il un moyen de garder le même format?, par exemple, le qoutes et de l'ordre. Suis-je utiliser le mauvais outil pour cela?

Je sais peut-être que le fichier d'origine, ce n'est pas tout à fait correct, mais je n'ai aucun contrôle dessus (c'est un Ruby on Rails fichier i18n).

Merci beaucoup.

  • yaml.dump a un default_style argument. À l'aide de default_style='"' de garder votre chaîne de valeurs de guillemets, mais vos clés et tous les autres types de valeur seront également enveloppé dans des guillemets doubles.
  • Merci!, Je vais garder cela à l'esprit, il aurait été vraiment utile si ce n'était pas pour les touches 🙁
  • Vous aurez probablement un moment difficile de la commande de clés, aussi. yaml.load vous donne un dict; ses touches sont non-ordonnée. yaml.dump probablement sorties dans l'ordre que l'itération va.
  • Le nouveau fichier représente exactement la même information (en YAML) que l'origine de fichier; il n'y a pas de raison de garder le même format.
  • c'est vrai, mais je voulais garder le format, parce que c'est utile, étant donné le contexte de la sublime paquet que j'ai créé github.com/NicoSantangelo/sublime-text-i18n-rails