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

发布于 2024-11-19 11:32:10 字数 625 浏览 2 评论 0原文

对于 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)我显然将原始字段的大小增加了一倍。这是“追加”模式的功能吗?如何“回零并重写”? - 和/或 -

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

问题是否是数据没有再次压缩,因此其尺寸很大?

A relative noob to Python, I've successfully pulled a text file, out of a zip archive, contained in a PostgreSQL bytea field, using this code:

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

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

I've then done the work I need on that text file... So far, so good!

Now, though, am a bit confused on syntax to get the content.txt zipped back into its correct place in the archive, then written back to 'archivefield'.

Could any of you experts here suggest the little bit of syntax I'd need? Almost there!

Well, thanks to help received here - we're now certainly writing back to 'archivefield' - this is great!

Issues now are:

1) I'm apparently doubling the size of the original field. Is this a function of 'append' mode? How to 'wind back to zero and rewrite over the field?
- and/or -

2) data I'm writing back doesn't encode back into hex(?) mode as the original data appeared to be - and would be standard for v9 of PostgreSQL.
- OR -

Is the problem that the data is not being zipped again, hence its large size?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伴我老 2024-11-26 11:32:10

使用 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"] 处的先前值。恐怕我帮不了你。

Use 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

then write str.getvalue() back to your PostgreSQL database, overwriting the previous value at rv[0]["archivefield"]. I can't help you with that, I'm afraid.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文