Extrahieren bestimmter Daten aus .pdf und speichern Sie Sie in Excel-Datei
Jeden Monat muss ich daraus einige Daten aus .pdf-Dateien erstellen einer Excel-Tabelle.
Ich bin in der Lage, zu konvertieren .pdf-Datei in text, aber ich bin mir nicht sicher, wie Sie Sie zu extrahieren und speichern Sie die spezifischen Informationen, die ich will. Nun habe ich diesen code:
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = file(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()
fstr = ''
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
str = retstr.getvalue()
fstr += str
fp.close()
device.close()
retstr.close()
return fstr
print convert_pdf_to_txt("FA20150518.pdf")
Und das ist das Ergebnis:
>>>
AVILA 72, VALLDOREIX
08197 SANT CUGAT DEL VALLES
(BARCELONA)
TELF: 935441851
NIF: B65512725
EMAIL: buendialogistica@gmail.com
JOSE LUIS MARTINEZ LOPEZ
AVDA. DEL ESLA, 33-D
24240 SANTA MARIA DEL PARAMO
LEON
TELF: 600871170
FECHA
17/06/15
FACTURA
20150518
CLIENTE
43000335
N.I.F.
71548163 B
PÁG.
1
Nº VIAJE
RUTA
DESTINATARIO / REFERENCIA
KG
BULTOS
IMPORTE
2015064210-08/06/15
CERDANYOLA DEL VALLES -> VINAROS
FERRER ALIMENTACION - VINAROZ
2,000.0
1
150,00
TOTAL IMP.
%
IMPORTE
BASE
150,00
150,00
%
21,00
IVA
%
REC.
TOTAL FRA.
(€)
31,50
181,50
Eur
Forma Pago:
Banco:
CONTADO
Vencimientos:
17/06/15
181,50
Ok, jetzt habe ich den text in die variable convert_pdf_to_txt.
Möchte ich extrahieren dieser Informationen: Kunden, die Nummer der Rechnung, Preis, Ablaufdatum und die Art und Weise zu bezahlen.
Name des Kunden immer nach unten "E-MAIL: [email protected]"
Anzahl der bill immer down sind "FACTURA"
Preis immer unten sind zwei Zeilen "Vencimientos:"
Ablauf Datum immer unten sind "Vencimientos:"
Bezahlen immer nach unten "Banco:"
Ich denke, in so etwas wie dies tun. Wenn ich konvertieren kann dieser text in eine Liste und kann so etwas tun:
Suche Kunde:
i=0
while i < lengthlist
if listitem[i] == "EMAIL: [email protected]"
i+1
Customer = listitem[i]
i = lengthlist
else:
i+1
Suche bill-Nummer:
i=0
while i < lengthlist
if listitem[i] == "FACTURA"
i+1
Customer = listitem[i]
i = lengthlist
else:
i+1
Nachdem ich nicht weiß, wie speichern in Excel, aber ich bin mir sicher, dass ich finden kann, Beispiele im forum, aber zuerst muss ich die entpacken nur diese Daten.
InformationsquelleAutor Xavier Villafaina | 2015-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen hatte die richtige Idee
InformationsquelleAutor Riet
Nehmen wir ein einfacheres Beispiel, dass ich hoffe, dass stellen Sie Ihre Frage.
Du einen string hast
stringPDF
wie diese:Einen Wert von X Zeilen nach einen Namen (in deinem Beispiel X ist oft 1, manchmal 2, aber lasst uns einfach sagen, es kann eine beliebige Zahl).
\n
stellen die Zeilenumbrüche (beim drucken die Zeichenfolge, druckt es auf mehreren Linien)Zuerst wandeln wir den string in eine Liste von Zeilen, die durch die Spaltung, wo es Zeilenumbrüche:
Je nach Ihrem string, müssen Sie möglicherweise, um es zu reinigen. Hier habe ich ein paar zusätzliche Leerzeichen am Ende (
'name1 '
statt'name1'
). Ich verwende eine Liste mit Verständnis undstrip()
zu entfernen:Haben wir einmal eine richtige Liste, definieren wir eine einfache Funktion, die einen Wert zurückgeben, der name und X (X-Linien zwischen Namen und Wert):
InformationsquelleAutor Mel
Probieren Sie etwas wie dieses:
Wenn Sie sicher sind, dass der Schlüssel nur Linien enthalten, was Sie suchen ("FACTURA" und so weiter) können Sie ersetzen die Bedingungen, mit
InformationsquelleAutor Michel
Vielen Dank für deine Hilfe, die ich nehmen code von zwei Beispielen, die Sie mir geben und ich kann jetzt extrahieren Sie alle Informationen, die ich will.
Paar Beispiele:
InformationsquelleAutor Xavier Villafaina