如何使用python将多个文件从pdf转换为文本文件

时间:2017-12-14 05:43:05

标签: python list pdf while-loop

我有一个将pdf文件转换为文本文件的python脚本。  系统要求用户输入包含PDF文件的文件夹的路径。

问题是脚本只是转换一个文件,需要的是使脚本转换指定目录中存在的所有PDF文件。

  

脚本列出​​了指定目录中的所有现有文件   它转换所有文件,不包括上一个文件

增加 i

后的

结果

enter image description here

的代码:

import os
from os import chdir, getcwd, listdir, path
import codecs
import pyPdf
from time import strftime

def check_path(prompt):
    ''' (str) -> str
    Verifies if the provided absolute path does exist.
    '''
    abs_path = raw_input(prompt)
    while path.exists(abs_path) != True:
        print "\nThe specified path does not exist.\n"
        abs_path = raw_input(prompt)
    return abs_path    

print "\n"

folder = check_path("Provide absolute path for the folder: ")

list=[]
directory=folder
for root,dirs,files in os.walk(directory):
    for filename in files:
        if filename.endswith('.pdf'):
            t=os.path.join(directory,filename)
            list.append(t)

m=len(list)
i=0
while i<=len(list):

    path=list[i]
    head,tail=os.path.split(path)
    var="\\"

    tail=tail.replace(".pdf",".txt")
    name=head+var+tail



    content = ""
    # Load PDF into pyPDF
    pdf = pyPdf.PdfFileReader(file(path, "rb"))
    # Iterate pages
    for j in range(0, pdf.getNumPages()):
        # Extract text from page and add to content
        content += pdf.getPage(j).extractText() + "\n"
    print strftime("%H:%M:%S"), " pdf  -> txt "
    f=open(name,'w')
    f.write(content.encode('UTF-8'))
    f.close
    i+=1

3 个答案:

答案 0 :(得分:1)

你错过了增加变量i。

在python中有一种简单的方法。

下载并安装PDFMiner。

然后使用子进程模块完成工作。

import subprocess

files = [
    'file1.pdf', 'file2.pdf', 'file3.pdf'
]
for f in files:
    cmd = 'python pdf2txt.py -o %s.txt %s' % (f.split('.')[0], f)
    run = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = run.communicate()
# display errors if they occur    
if err:
    print err

答案 1 :(得分:1)

除了i循环的变量while没有增加外,您还在i循环中使用相同的变量名for。因此,在离开for循环后,变量i的值已经更改。您应该在whilefor循环中使用单独的变量名称。

答案 2 :(得分:0)

您创建了一个while循环,但是while循环将永远运行,因为您在循环执行后没有更新i

刚刚放好 i+=1 在while循环的底部 并将你的for循环更改为

for x in range(0, pdf.getNumPages()):
    # Extract text from page and add to content
    content += pdf.getPage(x).extractText() + "\n"

for循环的i干扰了while循环