PDF抓取:如何为在Python中抓取的每个pdf自动创建txt文件?

时间:2015-02-17 22:09:58

标签: python loops pdf pdfminer

这就是我想要做的:一个程序,它将pdf文件列表作为输入,并为列表的每个文件返回一个.txt文件。

例如,给定listA = [“file1.pdf”,“file2.pdf”,“file3.pdf”],我希望Python创建三个txt文件(每个pdf文件一个),比​​如说“file1”。 txt“,”file2.txt“和”file3.txt“。

由于this guy,我让转化部分顺利运作。我所做的唯一更改是在maxpages语句中,我在其中分配1而不是0以便仅提取第一页。正如我所说,我的代码的这部分工作正常。这是代码。

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
maxpages = 1
caching = True
pagenos=set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
    interpreter.process_page(page)
fp.close()
device.close()
str = retstr.getvalue()
retstr.close()
return str

事情是我似乎无法让Python返回我就是我在第二段中所说的。我尝试过以下代码:

def save(lst):
i = 0

while i < len(lst):
    txtfile = "enegep"+str(i)+".txt" #enegep is like the identifier of the files
    artigo = convert_pdf_to_txt(lst[0])
    with open(txtfile, "w") as textfile:
        textfile.write(artigo)
    i += 1

我使用两个pdf文件的列表作为输入运行了该保存功能,但它只生成了一个txt文件并保持运行几分钟而不生成第二个txt文件。什么是实现目标的更好方法?

1 个答案:

答案 0 :(得分:1)

您不会更新i,因此您的代码会陷入i += 1所需的无限循环中:

def save(lst):
    i = 0   # set to 0 but never changes
    while i < len(lst):
        txtfile = "enegep"+str(i)+".txt" #enegep is like the identifier of the files
        artigo = convert_pdf_to_txt(lista[0])
        with open(txtfile, "w") as textfile:
            textfile.write(artigo)
     i += 1 # you need to  increment i

更好的选择是简单地使用range

def save(lst):
    for i in range(len(lst)): 
        txtfile = "enegep{}.txt".format(i) #enegep is like the identifier of the files
        artigo = convert_pdf_to_txt(lista[0])
        with open(txtfile, "w") as textfile:
            textfile.write(artigo)

您也只使用lista[0],因此您可能还想更改该代码,以便在每次迭代时移动到列表中。

如果lst实际上是lista,您可以使用enumerate

   def save(lst):
        for i, ele in enumerate(lst): 
            txtfile = "enegep{}.txt".format(i) #enegep is like the identifier of the files
            artigo = convert_pdf_to_txt(ele)
            with open(txtfile, "w") as textfile:
                textfile.write(artigo)