Hallo,
ich bin noch recht neu in der Welt des Programmierens und versteh leider komplett und gar nicht wo mein Fehler ist.
Ich möchte eine pdf-Datei einlesen und in eine txt-Datei schreiben, um später damit weiterarbeiten zu können.
Online habe auf der Seite: https://github.com/shakkaist/Python/blo ... nverter.py einen Code gefunden, um besagte Funktion für mehrer Dateien anzuwenden.
Leider erhalte ich immer nachfolgende Fehlermeldung:
C:\ProgramData\Anaconda3\python.exe C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py
Traceback (most recent call last):
File "C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py", line 50, in <module>
convertMultiple(pdfDir, txtDir)
File "C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py", line 41, in convertMultiple
text = convert(pdfFilename) # get string of text content of pdf
File "C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py", line 23, in convert
infile = file(fname, 'rb')
NameError: name 'file' is not defined
Process finished with exit code 1
Da ich Python 3.6.6 benutze, musst ich den Code etwas anpassen, wie unten aufgeführt. Kann mir jemand von euch weiterhelfen wo genau mein Fehler liegt ?
import os
import io
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
# converts pdf, returns its text content as a string
def convert(fname, pages=None):
if not pages:
pagenums = set()
else:
pagenums = set(pages)
output = io.StringIO()
manager = PDFResourceManager()
codec = 'utf-8'
converter = TextConverter(manager, output, codec=codec, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
infile = file(fname, 'rb')
#for page in PDFPage.get_pages(infile, pagenums):
#infile = open(fname, 'rb')
for page in PDFPage.get_pages(infile, pagenums, caching=caching, check_extractable=True):
interpreter.process_page(page)
infile.close()
converter.close()
text = output.getvalue()
output.close
return text
def convertMultiple(pdfDir, txtDir):
if pdfDir == "": pdfDir = os.getcwd() + "\\" # if no pdfDir passed in
for pdf in os.listdir(pdfDir): # iterate through pdfs in pdf directory
fileExtension = pdf.split(".")[-1]
if fileExtension == "pdf":
pdfFilename = pdfDir + pdf
text = convert(pdfFilename) # get string of text content of pdf
textFilename = txtDir + pdf + ".txt"
textFile = open(textFilename, "w") # make text file
textFile.write(text) # write text to text file
# textFile.close
pdfDir = r"C:\Users\Amy_6\Desktop\Uni\Python\Probeprojekt\Datei"
txtDir = r"C:\Users\Amy_6\Desktop\Uni\Python\Probeprojekt\Datei"
convertMultiple(pdfDir, txtDir)
Vielen Dank für eure Hilfe!
Viele Grüße
Pdf in eine Txt-Datei konfertieren
- sls
- User
- Beiträge: 480
- Registriert: Mittwoch 13. Mai 2015, 23:52
- Wohnort: Country country = new Zealand();
file() wird in Python3 nicht unterstützt. Nutze stattdessen open(). Damit der filedescriptor nicht händisch geschlossen werden muss, nutzt man das in Kombination mit dem with-Statement. Nächstes mal den Source-Code hier in <code>-Tags pasten, sonst ist der Code unbrauchbar, da u.a. Einrückungen verloren gehen.
When we say computer, we mean the electronic computer.
Guten morgen,
leider bekomme ich dann eine ähnliche Fehlermeldung (hoffe der Code wird jetzt richtig angezeigt):
Wenn ich hier mit einem "\" dem versuche entgegen zu wirken mit folgenden Code, bekomme ich wieder eine Fehlermeldung (s.o.):
Fehlermeldung:
leider bekomme ich dann eine ähnliche Fehlermeldung (hoffe der Code wird jetzt richtig angezeigt):
Code: Alles auswählen
C:\ProgramData\Anaconda3\python.exe C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py
Traceback (most recent call last):
File "C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py", line 50, in <module>
convertMultiple(pdfDir, txtDir)
File "C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py", line 41, in convertMultiple
text = convert(pdfFilename) # get string of text content of pdf
File "C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py", line 25, in convert
infile = open(fname, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Amy_6\\Desktop\\Uni\\Python\\Probeprojekt\\Dateifw9.pdf'
Process finished with exit code 1
Wenn ich hier mit einem "\" dem versuche entgegen zu wirken mit folgenden Code, bekomme ich wieder eine Fehlermeldung (s.o.):
Code: Alles auswählen
import os
import io
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
# converts pdf, returns its text content as a string
def convert(fname, pages=None):
if not pages:
pagenums = set()
else:
pagenums = set(pages)
output = io.StringIO()
manager = PDFResourceManager()
codec = 'utf-8'
converter = TextConverter(manager, output, codec=codec, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
#infile = file(fname, 'rb')
#for page in PDFPage.get_pages(infile, pagenums):
infile = open(fname, 'rb')
for page in PDFPage.get_pages(infile, pagenums, caching=caching, check_extractable=True):
interpreter.process_page(page)
infile.close()
converter.close()
text = output.getvalue()
output.close
return text
def convertMultiple(pdfDir, txtDir):
if pdfDir == "": pdfDir = os.getcwd() + "\\" # if no pdfDir passed in
for pdf in os.listdir(pdfDir): # iterate through pdfs in pdf directory
fileExtension = pdf.split(".")[-1]
if fileExtension == "pdf":
pdfFilename = pdfDir + pdf
text = convert(pdfFilename) # get string of text content of pdf
textFilename = txtDir + pdf + ".txt"
textFile = open(textFilename, "w") # make text file
textFile.write(text) # write text to text file
# textFile.close
pdfDir = r"C:\Users\Amy_6\Desktop\Uni\Python\Probeprojekt\Datei\"
txtDir = r"C:\Users\Amy_6\Desktop\Uni\Python\Probeprojekt\Datei\"
convertMultiple(pdfDir, txtDir)
Code: Alles auswählen
C:\ProgramData\Anaconda3\python.exe C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py
File "C:/Users/Amy_6/Desktop/Uni/Python/Probeprojekt/Datei/Pdftotxt.py", line 48
pdfDir = r"C:\Users\Amy_6\Desktop\Uni\Python\Probeprojekt\Datei\"
^
SyntaxError: EOL while scanning string literal
Process finished with exit code 1
- sls
- User
- Beiträge: 480
- Registriert: Mittwoch 13. Mai 2015, 23:52
- Wohnort: Country country = new Zealand();
Versuch's mal mit dem Pathlib-Modul, das ist genau für sowas gemacht.
pathlib.Path(r"C:\Users\Amy_6\Desktop\Uni\Python\Probeprojekt\Datei\")
Mit den suffix und iterdir() kannst du dann problemlos alle PDF-Dateien herausfiltern, öffnen, und manipulieren. Ich sehe dass das python-Script im selben Verzeichnis liegt. Man sollte generell immer mit relativen Pfaden arbeiten, nicht Absoluten. if pdfDir == "" ist auch nicht notwendig, da if path: bei einem leeren String immer False zurückgibt.
Das Öffnen von Dateien in Python macht man z.B. so:
pathlib.Path(r"C:\Users\Amy_6\Desktop\Uni\Python\Probeprojekt\Datei\")
Mit den suffix und iterdir() kannst du dann problemlos alle PDF-Dateien herausfiltern, öffnen, und manipulieren. Ich sehe dass das python-Script im selben Verzeichnis liegt. Man sollte generell immer mit relativen Pfaden arbeiten, nicht Absoluten. if pdfDir == "" ist auch nicht notwendig, da if path: bei einem leeren String immer False zurückgibt.
Das Öffnen von Dateien in Python macht man z.B. so:
Code: Alles auswählen
with open(file, 'w') as pdf_file:
pdf_file.write('Bla')
When we say computer, we mean the electronic computer.
@Mady: Pfade sind eben keine einfachen Strings und man sollte daher auch nicht mit Stringoperationen arbeiten. Das pathlib-Modul ist genau dafür gemacht.
Übrigens, Variablennamen und Funktionen werden klein_mit_unterstrich geschrieben.
Code: Alles auswählen
from pathlib import Path
def convert_multiple(input_path, output_path):
for pdf_filename in Path(input_path).glob("*.pdf"):
text = convert(pdf_filename) # get string of text content of pdf
text_filename = (Path(output_path) / pdf_filename.name).with_suffix(".txt")
with text_filename.open("w") as output:
output.write(text) # write text to text file