首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django中处理一个文件而不保存它是可能的吗?

在Django中处理一个文件而不保存它是可能的吗?
EN

Stack Overflow用户
提问于 2012-11-27 16:00:28
回答 2查看 353关注 0票数 0

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

代码语言:javascript
运行
复制
new_doc.save()
url = "/docs/" +settings.MEDIA_URL + new_doc.pdf_file.name
command = 'pdftk '+url+" dump_data_fields" 

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

有没有办法让pdftk在不保存文件的情况下处理它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 17:36:27

使用带有subprocess.PIPEsubprocess.Popen()作为stdinstdout参数。因为pdftk可以从stdin获取输入,所以您可以将文件直接“写入”pdftk,而不是写入文件系统:

代码语言:javascript
运行
复制
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)

Popen.communicate() method同时返回stdoutstderr结果。

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

票数 2
EN

Stack Overflow用户

发布于 2012-11-27 17:26:18

您最好的选择是使用StringIO

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

代码语言:javascript
运行
复制
from StringIO import StringIO
new_doc = 'foobar'
doc = StringIO(new_doc)
doc.seek(0)
doc.read()

输出将是'foobar‘

第一行导入StringIO (对于速度更快的版本,请从cStringIO导入StringIO)。然后我们创建一个字符串,并用它实例化一个StringIO对象。从那里看,它很像一个

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13579708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档