V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
bfpiaoran
V2EX  ›  Python

求问想处理一个 21Gjson 文件需要怎么操作啊

  •  
  •   bfpiaoran · 2018-07-06 16:46:47 +08:00 · 2899 次点击
    这是一个创建于 2092 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有人跟我说
    with open("file_name",'r') as file:
    for line in file:
    pass
    这样读可以的 有没有更好的方法呀
    30 条回复    2018-07-19 20:30:58 +08:00
    hellojinjie
        1
    hellojinjie  
       2018-07-06 16:51:35 +08:00 via Android
    直接 json.loads

    嗯,这个时候就是考验你是不是土豪的时候了😄
    hahastudio
        2
    hahastudio  
       2018-07-06 16:53:28 +08:00
    yedashuai
        3
    yedashuai  
       2018-07-06 16:55:59 +08:00
    @hellojinjie 楼上坏坏~~~
    mokeyjay
        4
    mokeyjay  
       2018-07-06 16:56:39 +08:00
    json 是有一定结构的,你一行一行读了也没法解析呀
    haon
        5
    haon  
       2018-07-06 16:56:48 +08:00
    分块啊
    bfpiaoran
        6
    bfpiaoran  
    OP
       2018-07-06 16:58:33 +08:00
    问题是 json 格式啊 可怜我的小破机器只有 16G @hahastudio @hellojinjie 坏银~~
    qfdk
        7
    qfdk  
       2018-07-06 16:59:49 +08:00 via iPhone
    扔进 elk ?
    yanaraika
        8
    yanaraika  
       2018-07-06 17:00:00 +08:00 via Android
    开 swap,存成 hdf 等适合大数据的格式
    InternetExplorer
        9
    InternetExplorer  
       2018-07-06 17:00:14 +08:00
    哪个机器导出来的?这么牛的机器一定也能读吧,让那个机器转成可以分块读取的数据结构再给你
    bfpiaoran
        10
    bfpiaoran  
    OP
       2018-07-06 17:00:38 +08:00
    @hahastudio 这个库可以读么
    eastrd
        11
    eastrd  
       2018-07-06 17:00:39 +08:00 via Android
    丢进 Splunk 吧
    bfpiaoran
        12
    bfpiaoran  
    OP
       2018-07-06 17:01:33 +08:00
    @InternetExplorer 从网上下的 dns 记录
    bfpiaoran
        13
    bfpiaoran  
    OP
       2018-07-06 17:02:05 +08:00
    @yanaraika
    @eastrd 就像用本机处理 再开大数据好麻烦。。
    bfpiaoran
        14
    bfpiaoran  
    OP
       2018-07-06 17:06:46 +08:00
    凉了 不是 21G 解压之后 127G
    hahastudio
        15
    hahastudio  
       2018-07-06 17:09:58 +08:00
    @bfpiaoran https://www.dataquest.io/blog/python-json-tutorial/
    不过好像要分行,如果你这个只有 1 行,那我估计你就要先预处理分行了
    Droi
        16
    Droi  
       2018-07-06 17:12:09 +08:00
    用 pandas 试试
    详细的教程:
    https://www.dataquest.io/blog/python-json-tutorial/
    strict
        17
    strict  
       2018-07-06 17:12:49 +08:00
    json.load(f)试试?
    xenme
        18
    xenme  
       2018-07-06 17:13:53 +08:00
    @bfpiaoran DNS 记录也就一行一行的,不会台复杂,直接自己按行读取解析下就好了,又不是未知结构。
    814084764
        19
    814084764  
       2018-07-06 17:18:50 +08:00
    类似于 SAX 读取 XML 的方式??? DOM 方式肯定不行了。

    JDK 提供的 XML 解析方式分为两种:DOM 方式和 SAX 方式
    DOM:Document Object Model。需要读取整个 XML 文档,先需要在内存中构架代表整个 DOM 树的 Document 对象,可以进行随机访问. 需要考虑内存.适合增删改
    SAX:Simple API for XML。采用事件驱动的方式解析 XML 文件,边读边对文档进行处理.适合读取
    bfpiaoran
        20
    bfpiaoran  
    OP
       2018-07-06 17:20:07 +08:00
    读出来了 很普通的格式 我去想怎么处理啦 谢谢~~~
    with open("file_name",'r') as file:
    for line in file:
    pass
    这样读都是秒读的
    wizardoz
        21
    wizardoz  
       2018-07-06 17:21:25 +08:00
    自己从头解析啊,深度优先,一层层放入数据库。
    FanWall
        22
    FanWall  
       2018-07-06 17:22:00 +08:00 via Android
    @814084764 #19
    SAX +1,边读取边解析边对解析后的数据进行处理
    bfpiaoran
        23
    bfpiaoran  
    OP
       2018-07-06 17:30:54 +08:00
    @wizardoz 打算这么做了
    crab
        24
    crab  
       2018-07-06 17:32:28 +08:00
    导入数据库,再通过数据库来
    RicardoScofileld
        25
    RicardoScofileld  
       2018-07-06 18:02:14 +08:00
    有个流式读取 json 的库 好行叫 jsonstream 来着可以用那个
    RicardoScofileld
        26
    RicardoScofileld  
       2018-07-06 18:03:04 +08:00
    @Droi 如果 json 数据不规整,read_json 不会报错吗
    icyalala
        27
    icyalala  
       2018-07-06 18:56:24 +08:00
    mmap 然后用 SAX 的 API 读取。
    如果用 C++ 的话,可以试试 rapidjson。
    luozic
        28
    luozic  
       2018-07-08 01:56:59 +08:00 via iPhone
    想办法处理一下,把数据搞进数据库。后面玩起来就爽了,elk,postgresql 都支持直接处理 json
    bfpiaoran
        29
    bfpiaoran  
    OP
       2018-07-19 19:09:06 +08:00
    @luozic 搞了下太慢了 最后把首字母排序处理的~~
    luozic
        30
    luozic  
       2018-07-19 20:30:58 +08:00
    @bfpiaoran 你得先把这些数据解析一下塞到数据库里面再搞,直接塞,太耗 cpu 内存了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5286 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 08:16 · PVG 16:16 · LAX 01:16 · JFK 04:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.