Python: симуляция записи в файл объекта без создания файла - PullRequest
0 голосов
/ 05 ноября 2019

Я работаю с Python3 и хочу имитировать запись в файл, но без фактического создания файла.

Например, мой конкретный случай выглядит следующим образом:

merger = PdfFileMerger()

for pdf in files_to_merge:
    merger.append(pdf)

merger.write('result.pdf')  # This creates a file. I want to avoid this
merger.close()

# pdf -> binary
with open('result.pdf', mode='rb') as file:  # Conversely. I don't want to read the data from an actual file
    file_content = file.read()

Я думаю, StringIO является хорошим кандидатом для этой ситуации, но я не знаю, как использовать его в этом случае, который будет записывать в объект StringIO. Это будет выглядеть примерно так:

output = StringIO()
output.write('This goes into the buffer. ')

# Retrieve the value written
print output.getvalue()

output.close() # discard buffer memory

# Initialize a read buffer
input = StringIO('Inital value for read buffer')

# Read from the buffer
print input.read()

1 Ответ

2 голосов
/ 05 ноября 2019

Поскольку метод PdfFileMerger.write поддерживает запись в файловые объекты, вы можете просто сделать запись объекта PdfFileMerger в объект BytesIO:

from io import BytesIO

merger = PdfFileMerger()

for pdf in files_to_merge:
    merger.append(pdf)

output = BytesIO()
merger.write(output)
merger.close()

file_content = output.getvalue()
...