如何在Python中将StringIO文本文件写回压缩档,然后再写入PostgreSQL的bytea字段?
我对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"]
里的值。抱歉,我帮不了你这个。