美文网首页
python:数据存储与程序调试

python:数据存储与程序调试

作者: JackHCC | 来源:发表于2019-04-26 16:27 被阅读0次

    python基础知识

    数据转储

    数据转换存储

    • 数据的存储交换发生在:
    _ 在同一程序的不同片段之间;
    _ 在不同的程序之间;
    _ 在不同主机之间。
    • 这些数据可能存储一些简单的文本和数值,也可能是非常复杂具有结构的一组数据。
    • 为了实现数据的存储和交换,有多种相对流行的数据存储交换方式:
    _ 文件或数据库。

    • INI文件
      • INI用来表示简单的、分层次的配置文件,其内涵类似于Python的词典。
      • 本质是纯文本文件,但有一些简单的格式。
    • INI文件的读写
      • 由于格式非常简单,可以基于一般文件的read/write进行存取。
      • Python提供了内置库:
    import configparser
    config = configparser.ConfigParser()
    config.add_section('Init')
    config.set('Init', 'Server', '127.0.0.1')
    config.set('Init', 'Port', '12000')
    with open('my.ini', 'wt') as configfile:
        config.write(configfile)
    
    • pickle
      • Pickle库可以实现任意python对象的存储。
    import pickle
    todo = ['write a blog post',
    'reply an email',
    'read a book']
    pickle_file = open('todo.pickle', 'wb')
    pickle.dump(todo, pickle_file)
    
    • Pickle & cPickle
      • Pickle
    pickle_file = open('todo.pickle', "rb")
    todo = pickle.load(pickle_file)
    pickle_file.close()
    print(todo)
    
    • JSON
      • Pickle仅限于Python程序使用,如何和其他语言交互?
      • JSON (JavaScript Object Notation) 是跨语言的轻量级数据交换格式。
      • 易于被人工读取、修改,也容易被机器读取和写入。
      • 符合 ECMA-262 3rd Edition标准。
      • JSON语言无关,它可以方便的被 C, C++, C#,Java, JavaScript, Perl, Python等语言读取和生成。
      • 结论:JSON是理想的数据交换格式,可以实
      现跨语言的、跨计算机的复杂数据传输。
    import json
    datastore = { "room‐number": 100,
    "use": "reception",
    "sq‐ft": 50,
    "price": [100, 200, 300]
    }
    with open("ds.json", 'w') as f:
        json.dump(datastore, f)
    with open("ds.json", 'r') as f:
        data = json.load(f)
    print(data)
    
    • 数据库
      • 文件存储不适用于大项目,此时需要使用数据库。
      • 数据管理系统 Database Management System= DBMS
      _ 一系列存储数据的文件;
      _ 一系列程序用于访问和更新其中的数据。
      • 目前最流行的数据库是关系型数据库。
    • SQLite
      • SQlite 是开源的数据库,可以嵌入在其他程序中,不需要安装。
      • 单机版本,不能并发、不能网络访问、不需要用户名密码鉴权(但可以加密)。
      • Portable – 仅使用了ANSI-standard C语言,因此可在各种平台编译;
      • Reliable – 良好的测试,开源代码;
      • Small – 300 kb 的库,只需要16kb的stack和100kb的heap,甚至可以运行在单片机上。
    • 建库
    import sqlite3
    conn = sqlite3.connect('example.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE money
    (日期, 姓名, 支出)''')
    for d, n, m in [("2019‐4‐1", "Li Lei", 52),
    ("2019‐4‐2", "Han Meimei", 300),
    ("2019‐4‐5", "Li Lei", 230),
    ("2019‐4‐8", "Li Lei", 170),
    ("2019‐4‐10", "Han Meimei", 96)]:
        c.execute("INSERT INTO money VALUES (?,?,?)",(d,n,m))
    conn.commit()
    conn.close()
    
    • 用库
    import sqlite3
    conn = sqlite3.connect('example.db')
    c = conn.cursor()
    result = c.execute('''select 姓名, 支出
          from money where 支出>100;''')
    for row in result:
        name = row[0]
        pay = row[1]
        print(f"{name} pay {pay}>100")
    conn.close()
    
    • 其他格式
      • MAT:Matlab数据存储格式
      • Python可以直接读取MAT文件,Python也可以调用Matlab完成特定任务。
    目录处理

    • 查找目录下的子目录和文件
    _ glob库
    • 遍历目录
    _ os.walk方法

    • 实例
    import os
    from os.path import join, getsize
    for root, dirs, files in os.walk('.'):
    print("root=", root)
    print(sum(getsize(join(root, name)
    ) for name in files), end="")
    print("bytes in", len(files),
    "non‐directory files")
    
    测试和调试
    • 测试驱动Test-driven开发
      • pytest是一个强大的Python测试工具。
      • pytest是软件测试框架,它会自动找到用户写的测试用例,运行测试并报告结果。
      • 支持插件或第三方扩展
      • 容易与其他工具对接。
      • pip install pytest
    • 规则
      • pytest 测试样例的规则:
      _ 测试文件以 test_ 开头(以 test 结尾也可以)
      _ 测试类以 Test 开头,并且不能带有 init 方法
      _ 测试函数以 test
      开头
      _ 断言使用基本的 assert 即可
      • pytest自动执行所有的测试,并报告通过和失败的测试用例数量。
    • print-调试
    • 使用日志文件
      • 对大规模程序长期运行而言,故障的机会是很少的,难以通过print获得;
      • 日志是一种非常好的手段,可以用于记录程序运行过程中的各种信息。
      • 理想的日志可以用来恢复和重现程序的运行过程。
      • 内置的logging库。
    • 日志等级


      image.png
    • 利用IPython.embed调试
      • from IPython import embed
      • 在需要调试的位置加入embed()函数
      • 可以在现场运行python解释器,可以自由执行任何python语句,包括:
      _ 打印输出任何变量
      _ 修改和删除任何变量
      • print/logging应对复杂数据结构的能力不足,embed()是较为理想的选择。

    相关文章

      网友评论

          本文标题:python:数据存储与程序调试

          本文链接:https://www.haomeiwen.com/subject/nxdqnqtx.html