我正在尝试使用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
答案 0 :(得分:1)
在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在里面只有第一页内容可用,这不是重要的。