avoid for loop calling Generator function
Peter Otten
__peter__ at web.de
Mon Feb 22 08:34:08 EST 2016
Arshpreet Singh wrote:
> Hi, I am converting PDF into text file, I am using following code.
>
> from pypdf2 import PdfFileReader
>
> def read_pdf(pdfFileName):
>
> pdf = PdfFileReader(pdfFileName)
>
> yield from (pg.extractText() for pg in pdf.pages)
>
> for i in read_pdf('book.pdf'):
> print(i)
>
> I want to avoid for loop , I also tried to create another function and
> call read_pdf() inside that new function using yield from but I think I am
> missing real picture here
While it is possible to replace the loop with
next(filter(print, read_pdf("book.pdf")), None)
or the slightly less convoluted
sys.stdout.writelines(map("{}\n".format, read_pdf("book.pdf")))
the for loop is the obvious and therefore recommended solution. Personally,
I would also replace
> yield from (pg.extractText() for pg in pdf.pages)
with the good old
for pg in pdf.pages:
yield pg.extractText()
and reserve the generator expression for occasions where it has a
demonstrable advantage in readability.
More information about the Python-list
mailing list