如何在Python中将StringIO文本文件写回压缩档,然后再写入PostgreSQL的bytea字段?

2 投票
1 回答
1717 浏览
提问于 2025-04-16 21:22

我对Python还是个相对新手,之前我成功地从一个zip压缩包中提取了一个文本文件,这个压缩包是存储在PostgreSQL的bytea字段里的,使用的代码是:

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

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

然后我对这个文本文件进行了我需要的操作……到目前为止,一切都很好!

不过,现在我有点困惑,不知道该用什么语法把content.txt重新压缩回去,并写回到'archivefield'里。

有没有哪位专家能给我一点语法上的建议?我快到了!

感谢这里的帮助——我们现在确实可以把数据写回到'archivefield'了——太好了!

现在的问题是:

1) 我似乎把原来的字段大小翻倍了。这是因为使用了'append'模式吗?我该如何“回到零点并覆盖这个字段”?

- 或者 -

2) 我写回的数据似乎没有像原始数据那样编码成十六进制(hex)格式,这在PostgreSQL的9版中是标准格式。

- 或者 -

是不是因为数据没有再次被压缩,所以它的大小才这么大?

1 个回答

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"] 里的值。抱歉,我帮不了你这个。

撰写回答