是否可以在Django中处理一个文件而不保存它?

2024-04-29 02:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pdftk处理PDF文件。在

new_doc.save()
url = "/docs/" +settings.MEDIA_URL + new_doc.pdf_file.name
command = 'pdftk '+url+" dump_data_fields" 

问题是我必须在pdftk之前使用new_doc.save。在

有没有办法让pdftk处理文件而不保存它?在


Tags: 文件nameurldocsnewdocsettingspdf
2条回答

你最好的选择是和StringIO

我假设在某一点上,new_doc来自一个模板,它是某种类型的文本。在这种情况下,你可以这样做。在

from StringIO import StringIO
new_doc = 'foobar'
doc = StringIO(new_doc)
doc.seek(0)
doc.read()

输出将为“foobar”

第一行import StringIO(对于更快的版本do From cStringIO import StringIO)。然后我们创建一个字符串并用它实例化一个StringIO对象。从那里看起来就像是

使用^{}^{}作为stdin和{}参数。因为pdftk可以接受来自stdin的输入,因此可以直接将文件“写入”到pdftk而不是文件系统:

import subprocess

command = ['pdftk', '-', 'dump_data_fields']
p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output, errorout = p.communicate(input=new_doc_data)

^{} method返回stdoutstderr结果。在

注意,.communicate()input参数必须是字符串。如果new_doc是某种文件对象,则必须传入new_doc.read()或类似的结果;在上面的示例中,我使用变量名new_doc_data来指示您将来自new_doc的数据作为字符串传入,因为我不知道可以在这些对象上使用什么API。在

相关问题 更多 >