Cargando documento como cadena cruda en yaml con PyYAML

Quiero analizar documentos yaml como los siguientes

meta-info-1: val1 meta-info-2: val2 --- Plain text/markdown content! jhaha 

Si load_all esto con PyYAML, obtengo lo siguiente

 >>> list(yaml.load_all(open('index.yml'))) [{'meta-info-1': 'val1', 'meta-info-2': 'val2'}, 'Plain text/markdown content! jhaha'] 

Lo que estoy tratando de lograr aquí es que el archivo yaml debe contener dos documentos, y el segundo se debe interpretar como un documento de una sola cadena, más específicamente cualquier cuerpo grande de texto con formato de rebaja. No quiero que se analice como syntax YAML.

En el ejemplo anterior, PyYAML devuelve el segundo documento como una sola cadena. Pero si el segundo documento tiene un : carácter en lugar de ! por ejemplo, me sale un error de syntax. Esto se debe a que PyYAML está analizando el contenido de ese documento.

¿Hay alguna manera de decirle a PyYAML que el segundo documento es solo una cadena en bruto y no analizarlo?

Edit : Algunas respuestas excelentes allí. Mientras se utilizan comillas o la syntax literal resuelve el problema mencionado, me gustaría que los usuarios puedan escribir el texto sin formato sin ningún texto extra. Solo los tres - (s . ‘S) y escriba un cuerpo grande de texto sin formato. Lo que también podría incluir citas también. Entonces, me gustaría saber si puedo decirle a PyYAML que analice solo un documento y me dé el segundo en crudo.

Eidt 2 : Entonces, adaptar la idea de agf, en lugar de usar un try / except como el segundo documento podría ser una syntax de yaml válida,

 config_content, body_content = open(filename).read().split('\n---') config = yaml.loads(config_content) body = yaml.loads(body_content) 

Gracias AGF.

Tu puedes hacer

 raw = open(filename).read() docs = [] for raw_doc in raw.split('\n---'): try: docs.append(yaml.load(raw_doc)) except SyntaxError: docs.append(raw_doc) 

Si no tiene control sobre el formato del documento original.

De los documentos de PyYAML,

La doble cita es el estilo más poderoso y el único que puede express cualquier valor escalar . Los escalares entre comillas dobles permiten escapar. Usando las secuencias de escape \ x ** y \ u ****, puede express cualquier carácter ASCII o Unicode.

Así que parece que no hay manera de representar un escalar arbitrario en el análisis si no se cita dos veces.

Si todo lo que quiere es escapar del carácter de dos puntos en YAML, enciérrelo entre comillas simples o dobles . Además, puede probar el estilo literal para su segundo documento, que debe tratarse como un escalar único.