usa tutorial que para instalar index funciona elastic crear consultas como comandos python parsing yaml pyyaml

python - tutorial - Analizando YAML, regresa con el número de línea



para que se usa elastic search (3)

Para una mayor inspiración, aquí está mi código para esto. Contiene más información de la solicitada anteriormente ya que informa la información de ubicación usando start_mark, end_mark en cada dict / list / unicode (usando dict_node, list_node, unicode_node subclasses, respectivamente).

https://gist.github.com/dagss/5008118

Estoy creando un generador de documentos a partir de datos YAML, que especificaría a qué línea del archivo YAML se genera cada elemento. ¿Cuál es la mejor manera de hacer esto? Entonces, si el archivo YAML es así:

- key1: item 1 key2: item 2 - key1: another item 1 key2: another item 2

Quiero algo como esto:

[ {''__line__'': 1, ''key1'': ''item 1'', ''key2'': ''item 2''}, {''__line__'': 3, ''key1'': ''another item 1'', ''key2'': ''another item 2''}, ]

Actualmente estoy usando PyYAML, pero cualquier otra biblioteca está bien si puedo usarla desde Python.


Lo hice añadiendo ganchos a Composer.compose_node y Constructor.construct_mapping :

import yaml from yaml.composer import Composer from yaml.constructor import Constructor def main(): loader = yaml.Loader(open(''data.yml'').read()) def compose_node(parent, index): # the line number where the previous token has ended (plus empty lines) line = loader.line node = Composer.compose_node(loader, parent, index) node.__line__ = line + 1 return node def construct_mapping(node, deep=False): mapping = Constructor.construct_mapping(loader, node, deep=deep) mapping[''__line__''] = node.__line__ return mapping loader.compose_node = compose_node loader.construct_mapping = construct_mapping data = loader.get_single_data() print(data)


Si usa ruamel.yaml > = 0.9 (del que soy el autor) y usa RoundTripLoader , puede acceder a la propiedad lc en los elementos de la colección para obtener la línea y la columna donde comenzaron en el YAML de origen:

def test_item_04(self): data = load(""" # testing line and column based on SO # http://.com/questions/13319067/ - key1: item 1 key2: item 2 - key3: another item 1 key4: another item 2 """) assert data[0].lc.line == 2 assert data[0].lc.col == 2 assert data[1].lc.line == 4 assert data[1].lc.col == 2

(línea y columna comienzan a contar a 0).

Esta respuesta muestra cómo agregar el atributo lc a los tipos de cadena durante la carga.