On Monday, 22 February 2016 19:05:24 UTC+5:30, Peter Otten wrote: > 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)
Why we are w=using filter here? > or the slightly less convoluted > > sys.stdout.writelines(map("{}\n".format, read_pdf("book.pdf"))) Actually I am using this function in Android App which is being built using Kivy, Where I am returning whole text into a file, So what you think will be more efficient way? > 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. But when I am calling pdf_read() from nother function to avoid for loop why it is not working? say: def hello() yield from read_pdf('book.pdf') print(hello()) # still returns memory location instead of text. If I am not wrong yield from can be used to avoid for loop? -- https://mail.python.org/mailman/listinfo/python-list