2009-08-26 13 views
29

Idealmente, mi piacerebbe un modulo o una libreria che non richieda l'accesso da superutente per l'installazione; Ho dei privilegi limitati nel mio ambiente di lavoro.Esiste un modulo Python per convertire RTF in testo normale?

+3

È possibile installare i pacchetti di Python con 'easy_install' e il' - -user' opzione senza autorizzazioni. –

risposta

8

OpenOffice ha un lettore RTF. Puoi usare python per scrivere OpenOffice, see here for more info.

Probabilmente si potrebbe provare a utilizzare l'oggetto magico com su Windows per leggere tutto ciò che odora ms-binary. Non lo consiglierei comunque.

In realtà l'analisi dei dati grezzi probabilmente non sarà molto difficile, see this example scritto in .bat/QBasic.

DocFrac è un convertitore open source gratuito tra RTF, HTML e testo. Piattaforme Windows, Linux, ActiveX e DLL disponibili. Probabilmente sarà piuttosto semplice racchiuderlo in python.

RTF::TEXT::Converter - Estensione Perl per la conversione di RTF nel testo. (in caso di problemi con DocFrac).

Formato RTF ufficiale (RTF) Specifications, versione 1.7, di Microsoft.

Buona fortuna (con i privilegi limitati nel tuo ambiente di lavoro).

+0

Grazie. Ho aperto il documento in OpenOffice e l'ho salvato come un semplice file di testo. Questo era probabilmente l'approccio più semplice. E grazie per avermi ricordato che è il mio ambiente di lavoro. Ho chiesto l'accesso sudo. – Tony

+1

Il collegamento a RTF :: TEXT :: Converter è rotto. Così è il link alla discussione sulla mailing list python. Questo è il motivo per cui le risposte ai link sono scoraggiate ... – GreenAsJade

+1

grazie per averlo indicato, ho risolto uno dei link. Purtroppo l'altro doveva essere cancellato. –

1

C'è una buona libreria pyrtf-ng per la gestione RTF per tutti gli usi.

+0

Grazie, ma il problema con pyrtf-ng è che è utile per generare file RTF, non per analizzarli. L'ho scaricato dalla sua pagina SourceForge (non c'è nulla sotto la scheda Download di Google Code), e questa è l'unica funzionalità che ho trovato. – Tony

+0

@tony, hai guardato http://code.google.com/p/pyrtf-ng/source/browse/#svn/trunk/rtfng/parser? Quando non ci sono ancora download su un progetto ospitato da Google Code, sfoglia le fonti! -) –

3

Avete controllato pyrtf-ng?

Aggiornamento: La funzionalità di analisi è disponibile se si esegue un checkout di Subversion, ma non sono sicuro di quanto sia completo. (Cerca nel modulo rtfng.parser.base.)

0

Mi sono imbattuto nella stessa cosa e stavo cercando di codificarlo da solo. Non è così facile, ma ecco cosa ho avuto quando ho deciso di andare per una app di comando. È rubino ma puoi adattarti molto facilmente al pitone. C'è un po 'di spazzatura per le intestazioni da pulire, ma puoi vedere più o meno l'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

Ho lavorato su una libreria chiamata Pyth, che può fare questo:

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

Conversione di un file RTF in testo in chiaro sembra qualcosa di simile:

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 può anche generare file RTF, leggere e scrivere XHTML, generare documenti dal markup Python alla Stan, e ha un supporto sperimentale limitato per il latex e il pdf outpu t. Il suo supporto RTF è pretty robust - lo usiamo in produzione per leggere i file RTF generati da varie versioni di Word, OpenOffice, Mac TextEdit, EIOffice e altri.

+6

Shame non è compatibile con Python 3-- – Epoc

+1

@Epoc, c'è un po 'di lavoro per renderlo compatibile con Python 3. Ho un fork nel mio repository che puoi installare con 'pip install git + https: //github.com/robertour/pyth @ pyth-py3'. Puoi vedere alcune delle discussioni [qui] (https://github.com/brendonh/pyth/pull/33/commits). –

0

Al contrario, se si desidera scrivere RTF facilmente da Python, è possibile utilizzare il modulo di terze parti rtflib. È un modulo abbastanza nuovo e incompleto ma ancora molto potente e utile. Di seguito è riportato un esempio che scrive "ciao mondo" nel testo RTF in un file RTF chiamato helloworld.rtf. Questo è un esempio molto primitivo e il modulo può anche essere usato per aggiungere colori, corsivo, tabelle e molti altri aspetti del rich text ai file RTF.

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

PyRTF-ng 0.9.1 non ha analizzato nessuno dei miei documenti RTF, sia con la ParsingException. Il primo documento è stato generato con OpenOffice 3.4, il secondo con Mac TextEdit.

Pyth 0.5.6 analizzato senza problemi entrambi i documenti, ma non ha elaborato correttamente i simboli cirillici.

Ma ogni editor apre il documento dell'editor altrui in modo corretto e senza problemi, quindi tutte le librerie sembrano avere un debole supporto RTF.

Quindi sto scrivendo il mio parser con il blackjack e le prostitute.

(Ho caricato i due file, in modo da poter controllare le librerie RTF da soli: http://yadi.sk/d/RMHawVdSD8O9http://yadi.sk/d/RmUaSe5tD8OD)

+1

link dead, ce l'hai ancora? – n611x007

1

Ho appena incontrato pyrtflib - non c'è molto (qualsiasi) la documentazione su di esso, è un pò un caso di installazione e quindi usando la funzione di aiuto integrato() per scoprire cosa è disponibile e cosa fa tutto.

Detto questo nella mia piccola versione di prova della sua funzione rtf.Rtf2Html.getHtml() è andata abbastanza bene. Non ho ancora provato la funzione Rtf2Txt ma vista la natura più semplice della conversione di rtf in testo normale dovrebbe andare bene mi aspetterei.

+0

Da allora ha dato la funzione Rtf2Txt.getText() e ha funzionato benissimo - il mio uso non è stato un test di tortura esaustivo per tutti i casi, ma tutti i casi che ho provato mi hanno dato l'output atteso – Blair

Problemi correlati