2010-04-30 54 views
3

我不太確定最好的方式來說這個,但我想要做的是閱讀一個PDF文件,進行各種修改,並保存修改過的PDF原始文件。截至目前,我能夠將修改過的pdf保存到一個單獨的文件中,但我期待替換原始文件,而不是創建新文件。如何覆蓋當前正在被Python讀取的文件

這裏是我當前的代碼:

from pyPdf import PdfFileWriter, PdfFileReader 

output = PdfFileWriter() 
input = PdfFileReader(file('input.pdf', 'rb')) 
blank = PdfFileReader(file('C:\\BLANK.pdf', 'rb')) 

# Copy the input pdf to the output. 
for page in range(int(input.getNumPages())): 
    output.addPage(input.getPage(page)) 

# Add a blank page if needed. 
if (input.getNumPages() % 2 != 0): 
    output.addPage(blank.getPage(0)) 

# Write the output to pdf. 
outputStream = file('input.pdf', 'wb') 
output.write(outputStream) 
outputStream.close() 

如果我改變outputStream到不同的文件名,它工作得很好,我只是不能保存在輸入文件,因爲仍在使用它。我嘗試過.close()這個流,但它也給我錯誤。

我有一種感覺,這有一個相當簡單的解決方案,我只是沒有找到它的運氣。

謝謝!

回答

2

你說你試圖關閉()流,但得到的錯誤?您可以刪除PdfFileReader對象以確保沒有人能夠訪問該流。然後關閉流。

from pyPdf import PdfFileWriter, PdfFileReader 

inputStream = file('input.pdf', 'rb') 
blankStream = file('C:\\BLANK.pdf', 'rb') 
output = PdfFileWriter() 
input = PdfFileReader(inputStream) 
blank = PdfFileReader(blankStream) 

... 

del input # PdfFileReader won't mess with the stream anymore 
inputStream.close() 
del blank 
blankStream.close() 

# Write the output to pdf. 
outputStream = file('input.pdf', 'wb') 
output.write(outputStream) 
outputStream.close() 
7

您可以隨時重命名臨時輸出文件的舊文件:

import os 
f = open('input.pdf', 'rb') 
# do stuff to temp.pdf 
f.close() 
os.rename('temp.pdf', 'input.pdf') 
1

如果PDF文件足夠小(那將取決於你的平臺上),你可以只讀取整個事情中,關閉該文件,修改數據,然後寫了整個事情又回到了同一個文件。