You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速将10万+字典列表生成符合BigQuery要求的换行分隔JSON文件

高效生成BigQuery兼容的换行分隔JSON文件方案

性能瓶颈原因

你原有实现速度慢的核心原因是循环内重复打开/关闭文件:每次open调用都涉及操作系统层面的文件句柄申请、权限校验、资源释放操作,十万次重复操作会把IO开销放大数百倍。

优化方案

方案1:单文件句柄循环写入(通用低内存场景)

将文件打开操作移到循环外部,全程只占用1个文件句柄,完全消除重复打开文件的开销,适合边生成字典边写入、内存有限的场景:

import json

# 写入模式直接新建/覆盖文件,不需要用追加模式
with open('cache/name.json', 'w', encoding='utf-8') as f:
    while condition:
        # 此处保留你原有生成store字典的逻辑
        json_str = json.dumps(store, ensure_ascii=False)
        f.write(f"{json_str}\n")

方案2:批量拼接后一次性写入(十万级数据最优性能)

如果内存足够,先把所有序列化后的JSON字符串存到列表中,最后一次性拼接写入磁盘,仅执行1次IO操作,性能比方案1高30%左右,十万条数据完全不会有内存压力:

import json

output_buf = []
while condition:
    # 此处保留你原有生成store字典的逻辑
    output_buf.append(json.dumps(store, ensure_ascii=False))

with open('cache/name.json', 'w', encoding='utf-8') as f:
    f.write('\n'.join(output_buf))

补充说明

你需要的这种每行一个JSON对象的格式是标准的NDJSON(换行分隔JSON)/JSON Lines格式,也是BigQuery导入JSON数据的官方要求格式,上述两种方案生成的文件都可以直接用于BigQuery导入。
如果字典中包含中文、特殊emoji等非ASCII字符,ensure_ascii=False参数可以避免字符被转义为Unicode编码,保证BigQuery可以正常解析内容。


内容的提问来源于stack exchange,提问作者Tenserflu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:36:07