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
chenminghit
V2EX  ›  Python

Python 支持的读取速度最快的文件格式是什么?

  •  
  •   chenminghit · 2017-06-30 17:16:40 +08:00 · 5602 次点击
    这是一个创建于 2498 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想用 python 对一堆数据进行处理,之后供 tensorflow 使用。不知道应该将这堆数据转成什么格式(最好是跨平台的),才能读取速度最快。
    这些数据大小约 200G ( matlab 的 mat 格式),是由很多很多的小文件组成的,里面的内容是格式化的数字和字符。
    17 条回复    2017-07-02 11:25:37 +08:00
    chenminghit
        1
    chenminghit  
    OP
       2017-06-30 17:21:23 +08:00   ❤️ 1
    HDF5 怎么样? google 到了这个。
    aaronzjw
        2
    aaronzjw  
       2017-06-30 17:33:55 +08:00 via Android
    了解下 hadoop?
    chenminghit
        3
    chenminghit  
    OP
       2017-06-30 18:07:17 +08:00
    @aaronzjw hadoop 稍微了解一点,这个学习成本太高了,我应该不需要。
    gstqc
        4
    gstqc  
       2017-06-30 18:56:11 +08:00 via iPhone
    二进制应该是最快的,如果设计良好。
    aaronzjw
        5
    aaronzjw  
       2017-06-30 18:56:18 +08:00 via Android
    @chenminghit 不懂啊,没遇到过这么大的文件读取。 能不能压缩一下
    aaronzjw
        6
    aaronzjw  
       2017-06-30 18:56:57 +08:00 via Android
    @chenminghit 很多小文件,应该压缩不了多少。。。
    AX5N
        7
    AX5N  
       2017-06-30 19:14:23 +08:00
    重点是数量有多少,得看是瓶颈在 i/o 还是在 python。
    如果在 i/o 你就提前合并成一个文件(举个例子,例如 iso 文件),然后每次读取一定的大小到内存就可以了。
    如果数量太大太大的话,python 光是调用函数消耗就特别大,纯 python 我也不知道有什么办法。你可以试试 for 一个千万位的数字,然后再在循环里进行一次乘法操作,慢到你想吐血(1s 左右的时长)。
    comzyh
        8
    comzyh  
       2017-06-30 19:21:47 +08:00 via Android
    HDF5 是我见过最好的

    其他的可以考虑 pickle, protobuf
    ruoyu0088
        9
    ruoyu0088  
       2017-07-01 07:36:39 +08:00
    用 h5py 读写 HDF5。
    chenminghit
        10
    chenminghit  
    OP
       2017-07-01 11:46:43 +08:00
    @AX5N 文件数量大概是 3000*2000 这么多,每个文件大概 30k 这么大。我需要先用 python 预处理一遍文件,把我需要的内容提取出来,以便 tensorflow 调用。这个过程肯定要删掉很多数据,并且做一些归一化。预处理这个过程需要处理多长时间都无所谓,因为只需处理一遍,可以慢慢处理。主要是 tensorflow 调用那个过程要快

    看了楼上各位的回复,我觉得我就去研究一下 HDF5 吧。谢谢各位。
    zhmin
        11
    zhmin  
       2017-07-01 14:48:53 +08:00 via iPhone
    hdfs 不适合寸小文件
    chenminghit
        12
    chenminghit  
    OP
       2017-07-01 15:19:55 +08:00 via iPhone
    @zhmin 没事,我应该可以将它们拼起来,拼成大文件
    chenminghit
        13
    chenminghit  
    OP
       2017-07-01 15:20:51 +08:00 via iPhone
    @zhmin sorry,看成了 hdf5
    hsyu53
        14
    hsyu53  
       2017-07-01 18:27:32 +08:00 via iPad
    可以试试 netcdf4,built on hdf5
    chenminghit
        15
    chenminghit  
    OP
       2017-07-01 19:53:09 +08:00 via iPhone
    @hsyu53 谢谢。我学习一下
    ecloud
        16
    ecloud  
       2017-07-02 02:52:22 +08:00
    Berkley DB
    fiht
        17
    fiht  
       2017-07-02 11:25:37 +08:00
    我感觉没有什么问题啊。
    就是读取六百万个文件然后处理之后再保存下来然后丢给 TensorFlow 去处理。
    你讲处理六百万个文件速度慢一点没关系因为是一次性处理的
    那 TensorFlow 那边速度快不快得看机器配置啊 (我没实际用过 TensorFlow
    你把六百万个文件挨个读取之后保存成一个 pkl 文件,然后下次要使用的时候直接 load 进来就可以。
    搞机器学习的应该很有钱,所以不用考虑内存不足的问题
    关注一波楼主,对这个很感兴趣,只是现在没时间没设备,搞不了这个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:47 · PVG 17:47 · LAX 02:47 · JFK 05:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.