python-3.x - 同时读取和写入一个 gzip 文件
问题描述
我见过 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 个文件似乎更少,但对于数十亿个文件的大量集合,这可能是一个巨大的改进。
解决方案
另一种方法是打开阅读它,然后打开它以追加。没有以读/写模式打开的选项,因为您不能在中间写入 gzip 文件。您只能将另一个 gzip 成员附加到最后。
顺便说一句,如果您要附加 gzip 成员,请确保它们足够大,可以从压缩中受益。至少几十 K,如果不是兆字节或更大的话。
推荐阅读
- python - 为什么这个 SQL 查询会失败?
- python - Getting the index of a timestamp element in a pandas data frame
- python - 将 a 转换为一段时间但保持相同的属性?
- c++ - 类的位宽
- wordpress - 我刚刚安装了 Xampp 并下载了最近的 Wordpress。我尝试更改任何主题,但出现以下错误
- scroll - 在 Windows 10 上使用罗技鼠标接收高精度 WM_MOUSEWHEEL 事件
- python - 以下问题的 Spark 解决方案(Transform、Pivot、CrossJoin)
- c++ - 从子类调用基类的受保护构造函数不起作用
- python - 如何确定具有函数的数字的严酷值?
- javascript - 从组件中获取 `children` 属性