2013-09-27 100 views
3

我想寫一個程序在Python中,需要一個PDF文件,並附加到它第一個任何pdf,其中包括一個水果的名稱(芒果,橙或蘋果) ,然後將pdf的動物名稱附加到原始文件(斑馬,猴子,狗),最後附加任何剩餘的PDF。這是我的代碼:合併PDF的python pypdf和刪除合併的文件

import os 
from PyPDF2 import PdfFileReader, PdfFileMerger 

originalFile="C:/originalFile.pdf" 

merger = PdfFileMerger() 
merger.append(PdfFileReader(file(originalFile, 'rb'))) 
os.remove(originalFile) 

for filename in os.listdir('C:/'): 
    if "Mango" in filename or "Apple" in filename or "Orange" in filename: 
     if ".pdf" in filename: 
      merger.append(PdfFileReader(file('C:/'+filename, 'rb'))) 
      os.remove("C:/"+filename) 

for filename in os.listdir('C:/'): 
    if "Zebra" in filename or "Monkey" in filename or "Dog" in filename: 
     if ".pdf" in filename: 
      merger.append(PdfFileReader(file('C:/'+filename, 'rb'))) 
      os.remove("C:/"+filename) 

for filename in os.listdir('C:/'): 
    if ".pdf" in filename: 
     merger.append(PdfFileReader(file('C:/TRIAL/'+filename, 'rb'))) 
     os.remove("C:/TRIAL/"+filename) 

merger.write(originalFile) 

當我運行這個程序,我得到以下錯誤:

os.remove(originalFile) WindowsError:[錯誤32]該進程無法訪問該文件,因爲它正在被另一個進程使用:'C:/originalFile.pdf'

任何人都可以解釋我如何在將文件添加到我的合併文件後關閉文件?

回答

1

您應該明確地關閉文件。

fd = file('C:/'+filename, 'rb') 
merger.append(PdfFileReader(fd)) 
fd.close() 
os.remove('C:/'+filename) 

一個更安全的版本:

fd = None 
try: 
    fd = file('C:/'+filename, 'rb') 
    merger.append(PdfFileReader(fd)) 
finally: 
    if fd: fd.close() 
if os.path.exists('C:/'+filename): os.remove('C:/'+filename) 

可以在Python中被簡化爲2.5+:

with file('C:/'+filename, 'rb') as fd: 
    merger.append(PdfFileReader(fd)) 
if os.path.exists('C:/'+filename): os.remove('C:/'+filename) 

這將導致Python來自動地關閉文件。

with open(originalFile,'rb') as pdf: 
    merger.append(PdfFileReader(pdf)) 
os.remove(originalFile) 

這個工作對我來說:

2

要關閉一個文件,你應該有with聲明,它總是關閉無論發生什麼情況的代碼with塊內的文件打開它。

只是提醒您,您可以關閉文件,因爲您已將pdf添加到merger。請注意,如果您只是用PdfFileReader(pdf)打開它並且沒有做任何事情,則無法刪除該文件或PdfFileReader對象將無法讀取該文件。這是因爲PdfFileReader只是實際讀取文件,如果您調用一些讀取方法就好像getPage

0

將originalFile文件打開,因此,直到關閉它才能刪除文件。 您需要修改你這樣的代碼:

merger = PdfFileMerger() 
fin = file(originalFile, 'rb') 
merger.append(PdfFileReader(fin)) 
fin.close() 
os.remove(originalFile) 
-1

全文合併是不是很難在蟒蛇。我看到你已經在使用PdfFileMerger了。只要pdf文件存在,這應該工作,並且分叉python進程的用戶有權訪問被合併的pdf。祝你好運。

+0

你沒有回答這個問題。 – justhalf