【问题标题】:Reading and writing a gzip file at the same time同时读取和写入一个 gzip 文件
【发布时间】:2020-11-02 05:54:05
【问题描述】:

我见过 python 代码,我们首先打开一个文件来读取它,然后再次打开它并写入它。当我尝试同时执行这两项操作时,会出现错误。从文档中,我没有看到“rwb”选项。它只是创建/读取/写入/追加模式之一。

所以我想做的是:

with gzip.GzipFile(stage3_filepath, 'rwb') as file:
    data = json.loads(file.read().decode('utf-8'))
    data["articles"].extend(article_list)
    json_string = json.dumps(data, ensure_ascii=False)
    file.write(json_string.encode('utf-8'))

只是想知道为什么不能这样做?还有其他选择吗?

正如其他人所问的那样,我的动机是避免花费额外的时间打开文件两次。 1 到 2 个文件似乎更少,但对于数十亿个文件的大量集合,这可能是一个巨大的改进。

【问题讨论】:

  • 先读后写有什么问题?
  • @DYZ 我的动机是避免花费额外的时间打开文件两次。 1 到 2 个文件似乎更少,但对于数十亿个文件的大量集合,这可能是一个巨大的改进
  • 存档文件是压缩文件,压缩是基于里面包含的数据。您无法修改压缩。您可以将压缩文件展开并在修改后再次将其压缩回来。对于大量文件,您可以并行化处理,但不能缩短压缩。
  • @TheGeorgeous 实际上,您可以扩展 gzip 压缩文件。阅读文档。
  • AFAIK 与从头开始实际压缩整个内容相比,压缩仍然很糟糕stackoverflow.com/questions/18097107/…

标签: python-3.x file gzip


【解决方案1】:

另一种方法是打开阅读它,然后打开它以追加。没有以读/写模式打开的选项,因为您不能在中间写入 gzip 文件。您只能将另一个 gzip 成员附加到最后。

顺便说一句,如果您要附加 gzip 成员,请确保它们足够大,以便从压缩中受益。至少几十 K,如果不是兆字节或更大的话。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2019-03-04
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多