zoukankan      html  css  js  c++  java
  • python存取数据进阶技巧-pickle,array模块

    我们在存/取数据时,没有必要存成文本形式,多试试二进制形式,文本只是骗骗眼睛的,要更快和更高效

    1.数组形式

    如果我们需要一个之包含数字的列表,那就试试array.array,注意,不是numpy模块下的,他是自己独立的模块,支持同样的pop,insert,extend操作,同时还支持从文件存/取文件更快的方法.

    #!/usr/bin/python
    # coding=utf-8
    # __author__='dahu'
    # data=2017-
    # 创建1000万个浮点数,存取文件,速度相当快
    # 这里的array不是numpy下面的,他是独立的
    from array import array  # 导入array类型
    from random import random
    import time
    floats = array('d', (random() for i in range(2)))
    print type(floats)
    print time.ctime()
    floats = array('d', (random() for i in range(10 ** 7)))  # 建立爽精度浮点数组,类型码'd',生成器表达式生成
    print 'End value -> ',floats[-1]
    with open('f1', 'wb') as f:
        floats.tofile(f)  # 数组存入二进制文件里
    floats2 = array('d')
    with open('f1', 'rb') as f:
        floats2.fromfile(f, 10 ** 7)  # 读取
    print 'End value -> ',floats2[-1]
    print floats == floats2
    print time.ctime()

    结果:

    /usr/bin/python2.7 /home/dahu/json_folder/descripter_exercise/bisect.lianxi/array.test.py
    <type 'array.array'>
    Thu Jun 15 15:45:52 2017
    End value ->  0.85158039292
    End value ->  0.85158039292
    True
    Thu Jun 15 15:45:54 2017
    
    Process finished with exit code 0

    2.python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

    注意这里使用的pprint模块,可以打印数据结构

    write

    #!/usr/bin/python
    #coding=utf-8
    #__author__='dahu'
    #data=2017-
    # 
    import pickle
    
    data1 = {'a': [1, 2.0, 3, 4+6j],
             'b': ('string', u'Unicode string'),
             'c': None}
    
    selfref_list = [1, 2, 3]
    # selfref_list.append(selfref_list)
    
    output = open('data.pkl', 'wb')
    
    # Pickle dictionary using protocol 0.
    pickle.dump(data1, output)
    
    # Pickle the list using the highest protocol available.
    pickle.dump(selfref_list, output, -1)
    
    output.close()

    read

    #!/usr/bin/python
    #coding=utf-8
    #__author__='dahu'
    #data=2017-
    # 
    import pprint, pickle
    
    pkl_file = open('data.pkl', 'rb')
    
    data1 = pickle.load(pkl_file)
    pprint.pprint(data1)
    
    data2 = pickle.load(pkl_file)
    pprint.pprint(data2)
    
    pkl_file.close()
    pprint.pprint(range(5))

    结果:

    /usr/bin/python2.7 /home/dahu/json_folder/descripter_exercise/bisect.lianxi/pickle..test.read.py
    {'a': [1, 2.0, 3, (4+6j)], 'b': ('string', u'Unicode string'), 'c': None}
    [1, 2, 3]
    [0, 1, 2, 3, 4]
    
    Process finished with exit code 0
  • 相关阅读:
    arm linux kernel 从入口到start_kernel 的代码分析
    Booting ARM Linux
    GNU风格 ARM汇编语法指南
    基于linux2.6.38.8内核启动过程完全解析[一]
    基于linux2.6.38.8内核zImage文件的自解压详解
    Busybox支持中文的解决办法
    对Kernel panic-not syncing:No init found...init=option to kernel错误总结!
    Linux 的启动流程
    计算机是如何启动的?
    Debian的定时执行命令Crontab
  • 原文地址:https://www.cnblogs.com/dahu-daqing/p/7020119.html
Copyright © 2011-2022 走看看