2009-08-26 64 views

Respuesta

8

OpenOffice tiene un lector RTF. Puede usar python para escribir OpenOffice, see here for more info.

Probablemente puedas probar el mágico com-objeto en Windows para leer cualquier cosa que huele a ms-binary. No lo recomendaría sin embargo.

En realidad, analizar los datos sin procesar probablemente no será muy difícil, see this example escrito en .bat/QBasic.

DocFrac es un convertidor de fuente abierta entre RTF, HTML y texto. Plataformas Windows, Linux, ActiveX y DLL disponibles. Probablemente será bastante fácil resumirlo en Python.

RTF::TEXT::Converter - Extensión Perl para convertir RTF en texto. (en caso de que tenga problemas con DocFrac).

Formato oficial de texto enriquecido (RTF) Specifications, versión 1.7, de Microsoft.

Buena suerte (con los privilegios limitados en su entorno de trabajo).

+0

Gracias. Abrí el documento en OpenOffice y lo guardé como un archivo de texto sin formato. Este fue probablemente el enfoque más simple. Y gracias por recordarme que es Mi entorno de trabajo. Pedí sudo acceso. – Tony

+1

El enlace a RTF :: TEXT :: Converter está roto. También lo es el enlace a la discusión en la lista de correo de Python. Es por eso que se desaconsejan las respuestas de enlace ... – GreenAsJade

+1

gracias por señalarlo, he reparado uno de los enlaces. Lamentablemente, el otro tuvo que ser eliminado. –

1

Hay buena biblioteca pyrtf-ng para uso general de RTF.

+0

Gracias, pero el problema con pyrtf-ng es que es útil para generar archivos RTF, no para analizarlos. Lo descargué de su página de SourceForge (no hay nada debajo de la pestaña Descargar en Google Code), y esta es la única funcionalidad que pude encontrar. – Tony

+0

@tony, ¿has mirado http://code.google.com/p/pyrtf-ng/source/browse/#svn/trunk/rtfng/parser? ¡Cuando todavía no hay descargas en un proyecto alojado en Google Code, navega por las fuentes! -) –

3

¿Has echado un vistazo pyrtf-ng?

Actualización: La funcionalidad de análisis está disponible si haces un pago de Subversion, pero no estoy seguro de cuán completo es. (Consulte en el módulo rtfng.parser.base).

0

Me encontré con lo mismo e intenté codificarlo yo mismo. No es tan fácil, pero esto es lo que tenía cuando decidí buscar una aplicación de línea de comandos. Es ruby ​​pero puedes adaptarte a Python muy fácilmente. Hay algo de basura en el encabezado para limpiar, pero se puede ver más o menos la idea.

f = File.open('r.rtf','r') 
b=0 
p=false 
str = '' 
begin 
    while (char = f.readchar) 
     if char.chr=='{' 
    b+=1 
    next 
    end 
     if char.chr=='}' 
    b-=1 
    next 
    end 
    if char.chr=='\\' 
    p=true 
    next 
    end 
    if p==true && (char.chr==' ' or char.chr=='\n' or char.chr=='\t' or char.chr=='\r') 
    p=false 
    next 
    end 
    if p==true && (char.chr=='\'') 
#this is the source of my headaches. you need to read the code page from the header and encode this. 
    p=false 
    str << '#' 
    next 
    end 
    next if b>2 
    next if p 
    str << char.chr 
    end 
rescue EOFError 
end 
f.close 
46

He estado trabajando en una biblioteca llamada Pyth, lo que puede hacer esto:

http://pypi.python.org/pypi/pyth/

la conversión de un archivo RTF a texto plano se ve algo como esto:

from pyth.plugins.rtf15.reader import Rtf15Reader 
from pyth.plugins.plaintext.writer import PlaintextWriter 

doc = Rtf15Reader.read(open('sample.rtf')) 

print PlaintextWriter.write(doc).getvalue() 

Pyth también puede generar archivos RTF, leer y escribir XHTML, generar documentos a partir de marcas de Python al estilo de Nevow, y tiene soporte experimental limitado para latex y pdf outpu t. Su soporte RTF es pretty robust - lo usamos en producción para leer archivos RTF generados por varias versiones de Word, OpenOffice, Mac TextEdit, EIOffice y otros.

+6

Es una pena que Python 3 no sea compatible ;-( – Epoc

+1

@Epoc, hay algo de trabajo para hacerlo compatible con Python 3. Tengo una bifurcación en mi repositorio que puede instalar con 'pip install git + https: //github.com/robertour/pyth @ pyth-py3'. Puedes ver algo de la discusión [aquí] (https://github.com/brendonh/pyth/pull/33/commits). –

0

Por el contrario, si desea escribir RTFs fácilmente desde Python, puede usar el módulo de terceros rtflib. Es un módulo bastante nuevo e incompleto pero aún muy poderoso y útil. A continuación se muestra un ejemplo que escribe "hello world" en texto enriquecido en un RTF llamado helloworld.rtf. Este es un ejemplo muy primitivo, y el módulo también se puede usar para agregar colores, cursivas, tablas y muchos otros aspectos de texto enriquecido a archivos RTF.

from rtflib import * 
file = RTF("helloworld.rtf") 
file.startfile() 
file.addstrict() 
file.addtext("hello world") 
file.writeout() 
1

PyRTF-ng 0.9.1 no ha analizado cualquiera de mis documentos RTF, tanto con el ParsingException. El primer documento se generó con OpenOffice 3.4, el segundo con Mac TextEdit.

Pyth 0.5.6 analizó sin problemas ambos documentos, pero no ha procesado correctamente los símbolos cirílicos.

Pero cada editor abre el documento del editor de otro correctamente y sin problemas, por lo que todas las bibliotecas parecen tener un soporte rtf débil.

Así que estoy escribiendo mi propio analizador con blackjack y putas.

(He subido dos archivos, para que pueda comprobar bibliotecas RTF en solitario: http://yadi.sk/d/RMHawVdSD8O9http://yadi.sk/d/RmUaSe5tD8OD)

+1

enlaces muertos, ¿todavía los tienes? – n611x007

1

me encontré con pyrtflib - no hay mucho (cualquier) la documentación sobre el mismo, es un poco un caso de la instalación y luego usando la función de ayuda incorporada() para averiguar qué está disponible y qué hace todo.

Habiendo dicho eso en mi pequeña ejecución de prueba de su función rtf.Rtf2Html.getHtml() fue lo suficientemente bueno. No he probado la función Rtf2Txt, pero dada la naturaleza más simple de convertir rtf a texto sin formato, debería funcionar bien.

+0

Desde entonces, he dado una respuesta a la función Rtf2Txt.getText() y funcionó bien; mi uso no fue exhaustivo en ningún caso, pero todos los casos que probé dieron como resultado la salida esperada. – Blair

Cuestiones relacionadas