es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función lambda takewhile no reconoce la cadena.

Así que tengo una sección de comentarios al comienzo de mi archivo. Lo que quiero es que se extraiga la línea que comienza con ”# Descripción: ‘. Pero por alguna razón que no entiendo, no está funcionando.
Al ingresar ”#’ obtengo lo que espero, al igual que ”# NOTA”, pero ”# Descripción: ” e incluso ”# D” parece no devolver nada. ¿Alguien puede ayudarme a entender esto?

Aquí está la sección de comentarios de mi archivo:

<h1>NOTA: los caracteres de espacio en blanco sucesivos se tratan como un solo delimitador</h1>

<h1>NOTA: todas las líneas que comienzan con ''#' se tratan como comentarios</h1>

<h1>NOTA: La descripción debe venir después de ''# Descripción: '' para ser reconocida</h1>

<p>#</p>

<h1>Descripción: Óptica de alta dispersión con O-16 (4+) a 6 MeV/nucleón. Proporcionada por <nombre, apellido> el <fecha y hora>.</h1>

<p>#
#

Aquí está el código que estoy utilizando:

from itertools import takewhile
with open(pathname, 'r') as fobj:
    # takewhile devuelve un iterador de todas las líneas
    # que comienzan con la cadena de comentarios
    headiter = takewhile(lambda s: s.startswith('# Descripción: '), fobj)
    descripcion = list(headiter)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El código parece estar correcto, así que el problema puede estar en la cadena de comentario en sí. Es posible que existan caracteres ocultos o problemas de codificación que hagan que la cadena no coincida exactamente. Una solución sería copiar la cadena de comentario del archivo y pegarla directamente en el código para asegurarse de que sea una coincidencia exacta. Alternativamente, podrías intentar usar una expresión regular para hacer coincidir la cadena de comentario con cierta flexibilidad para espacios en blanco u otros caracteres ocultos.

Comments are closed.