2011-08-17 116 views
5

Estoy tratando de extraer un contenido de tablas en documentos DOCX Word y soy nuevo en xml/xpath.Extrayendo tablas de un documento DOCX Word en python

from docx import * 
document = opendocx('someFile.docx') 
tableList = document.xpath('/w:tbl') 

Esto desencadena el error "XPathEvalError: Undefined namespace prefix". Estoy seguro de que es el primero en esperar mientras se desarrolla el guión. Lamentablemente, no pude encontrar un tutorial para python-docx.

¿Podría facilitarnos un ejemplo de extracción de tablas?

+0

dónde has sacado DOCX? ¿Puedes proporcionar una URL? –

+0

Deberías buscar un tutorial de python xml. La función opendocx devuelve un documento xml, de acuerdo con la fuente. El resto de las funciones de la biblioteca python-docx son envoltorios alrededor de la biblioteca lxml python, en http://lxml.de/ o eso me parece a mí. –

+0

@Spencer Rathbun: El siguiente código no genera error, pero curiosamente cede [] 'tableList = document.xpath ('// tbl')' 'print TableList' ¿Es esta alguna característica de DOCX que no hago? ¿entender? – mgierdal

Respuesta

3

Después de algunos vaivenes, descubrimos que se necesitaba un espacio de nombres para que esto funcione correctamente. El método xpath es la solución adecuada, solo necesita tener el espacio de nombres del documento pasado primero.

El lxml xpath method tiene los detalles para cosas del espacio de nombres. Mire hacia abajo en la página del enlace para pasar un diccionario de espacios de nombres y otros detalles.

Como se explica por mgierdal en su comentario anterior:

tblList = document.xpath('//w:tbl', namespaces=document.nsmap) works like a dream. So, as I understand it w: is a shorthand that has to be expanded to the full namespace name, and the dictionary for that is provided by document.nsmap.

Cuestiones relacionadas