我有一个将pdf文件转换为文本文件的python脚本。 系统要求用户输入包含PDF文件的文件夹的路径。
问题是脚本只是转换一个文件,需要的是使脚本转换指定目录中存在的所有PDF文件。
增加 i 后的脚本列出了指定目录中的所有现有文件 它转换所有文件,不包括上一个文件
结果
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
答案 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
的值已经更改。您应该在while
和for
循环中使用单独的变量名称。
答案 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循环