在Python中,如何将stringIO文本文件写回zip存档,然后返回PostgreSQL中的bytea字段?

时间:2011-07-12 18:20:04

标签: python zipfile stringio plpython

Python的一个相对的菜鸟,我已经使用以下代码成功地从PostgreSQL bytea字段中包含一个zip文件中的文本文件:

myzip = ZipFile(StringIO(rv[0]["archivefield"]), 'a')
data = myzip.read("content.txt",'a')

# *** WORK ON content.txt HAPPENS HERE ***

然后我完成了我在该文本文件上所需的工作......到目前为止,非常好!

现在,我对语法有点困惑,将content.txt压缩回存档中的正确位置,然后写回'archivefield'。

你们这里的专家可以提出我需要的一点点语法吗?几乎就在那里!

嗯,感谢这里收到的帮助 - 我们现在肯定会写回'archivefield' - 这太好了!

现在的问题是:

1)我显然将原始字段的大小加倍。这是'追加'模式的功能吗?如何'回归零并在场上重写? - 和/或 -

2)我正在写回的数据不会编码回十六进制(?)模式,因为原始数据似乎是 - 并且将成为PostgreSQL的v9的标准。 - 或者 -

问题是数据没有被再次压缩,因此它的大小?

1 个答案:

答案 0 :(得分:0)

使用ZipFile.writestr

strf = StringIO(rv[0]["archivefield"])
zipf = ZipFile(strf, "a")
data = myzip.read("content.txt"')

# process data, changing its value

zipf.writestr("content.txt", data)
zipf.close()  # actually write contents out

然后将str.getvalue()写回PostgreSQL数据库,覆盖rv[0]["archivefield"]的先前值。我不能帮助你,我很害怕。