Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何覆盖Python当前正在读取的文件_Python_Pdf_Input_Overwrite - Fatal编程技术网

如何覆盖Python当前正在读取的文件

如何覆盖Python当前正在读取的文件,python,pdf,input,overwrite,Python,Pdf,Input,Overwrite,我不太确定这个词的最佳表达方式,但我想做的是阅读pdf文件,进行各种修改,并将修改后的pdf保存在原始文件上。现在,我可以将修改后的pdf保存到一个单独的文件中,但我希望替换原始文件,而不是创建一个新文件 这是我目前的代码: from pyPdf import PdfFileWriter, PdfFileReader output = PdfFileWriter() input = PdfFileReader(file('input.pdf', 'rb')) blank = PdfFileRe

我不太确定这个词的最佳表达方式,但我想做的是阅读pdf文件,进行各种修改,并将修改后的pdf保存在原始文件上。现在,我可以将修改后的pdf保存到一个单独的文件中,但我希望替换原始文件,而不是创建一个新文件

这是我目前的代码:

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()
流,但它也给了我错误

我有一种感觉,这有一个相当简单的解决方案,我只是没有任何运气找到它


谢谢

您始终可以将临时输出文件重命名为旧文件:

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

您说您试图关闭()流,但出现错误?您可以删除PdfileReader对象,以确保没有人仍然可以访问流。然后关闭小溪

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()

如果PDF足够小(这取决于您的平台),您可以只读取整个内容,关闭文件,修改数据,然后将整个内容写回同一个文件