使用从PDF文件中提取的文本重命名PDF文件

时间:2014-07-21 06:58:37

标签: python pdf rename

我正在尝试使用Python使用部分文件内容重命名PDF文件。情况就是这样。

PDF文件是商业发票,包含字词"商业发票"和"部门"。我想将文件重命名为" Commercial Invoice"和"部门",例如" 353624 HR"。

这是我到目前为止所做的:

from StringIO import StringIO
import pyPdf
import os

# a function here
def getPDFContent(path):
    content = ""
    num_pages = 10
    p = file(path, "rb")
    pdf = pyPdf.PdfFileReader(p)
    for i in range(0, num_pages):
        content += pdf.getPage(i).extractText() + "\n"
        content = " ".join(content.replace(u"\xa0", " ").strip().split())     
        return content 

# name of the source PDF file
PDF_name = '222'

# picking texts from the PDF file
pdfContent = StringIO(getPDFContent("C:\\" + PDF_name + ".pdf").encode("ascii", "ignore"))
for line in pdfContent:
    aaa = line.find(' Commercial Invoice ')
    CIN = line[aaa + 28: aaa + 38]
    bbb = line.find('Department')
    Dpt = line [bbb+20 : bbb+26]

    final_name = str(CIN + " " + Dpt)

print final_name

f = open("C:\\" + PDF_name + ".pdf")
f.close()

os.rename("C:\\" + PDF_name + ".pdf", "C:\\" + final_name + ".pdf")

它一直有效,直到打印出提取的文本为止。 print final_name',但在重命名文件的最后一部分,它给出了一个错误" WindowsError:[错误32]进程无法访问该文件,因为它正被另一个进程使用"。

这里出了什么问题?好像文件一旦没有正确关闭?

解决方案

在vks的帮助下,' getPDFContent'应定义为(关闭' p'):

def getPDFContent(path):
    content = ""
    num_pages = 10
    p = file(path, "rb")
    pdf = pyPdf.PdfFileReader(p)
    for i in range(0, num_pages):
        content += pdf.getPage(i).extractText() + "\n"
        content = " ".join(content.replace(u"\xa0", " ").strip().split())     
    p.close()
    return content 

3 个答案:

答案 0 :(得分:1)

def getPDFContent(path)中的

在p = file(path,“rb”)之后

内容复制后,

你需要关闭文件。

p.close()。

把它放在for循环之后但是在函数中。 这应该在此之后起作用。

答案 1 :(得分:0)

也将C:\\添加到最后一行的PDF_name中。

答案 2 :(得分:0)

实际上p.close应该不在for循环中。否则它将无法正常工作。

for i in range(0, num_pages):
     content += pdf.getPage(i).extractText() + "\n"
     content = " ".join(content.replace(u"\xa0", " ").strip().split())     
p.close()
return content

如果p.close在里面只有第一页内容可用,这不是重要的。