《Head First Python》 第七章 Web开发之——数据建模 (电子书247-250)

原创 2017年01月02日 23:00:23

数据建模

说人话:就是解决如何把原始的文本形式的数据文件,转换成按照预先定制类的一个个实例的方法,从而方便用户调用、处理。

数据存储与调用

上图来自《head First Python》P247

这里写图片描述

上图来自《head First Python》P249

实现——数据存储和访问

数据存储和访问是有两个函数实现的:
put_to_store()函数
get_from_store()函数。

  • put_to_store()函数

返回值:

  1. AthleteList字典,包含Athlete对象;
  2. 将AthleteList写入pickle中;

代码:

def put_to_store(files_list):
    all_athletes = {}
    #定义字典,用于存储运动员对象
    for each_file in files_list:
        #get_coach_data(each_file)打开文件列表中的每一个文件,
        #并将其转换成AthleteList对象。
        #最后,将AthleteList对象存入all_athletes字典。
        ath = get_coach_data(each_file)
        all_athletes[ath.name] = ath
    try:
        #打开athletes.pickle文件,将字典 all_athletes存入其中。
        with open('athletes.pickle','wb') as athf:
            pickle.dump(all_athletes, athf)
    except IOError as ioerr:
        print('File error(put_to_store):' + str(ioerr))
    return(all_athletes)
  • get_from_store()函数

返回值:

  1. AthleteList字典,包含Athlete对象;

代码:

def get_from_store():
    all_athletes = {}
    try:
        #打开athletes.pickle文件,它是一个字典
        #然后,将其赋值给字典all_athletes。
        with open('athletes.pickle','rb') as athf:
            all_athletes = pickle.load(athf)
    except IOError as ioerr:
        print('File error(get_from_store):' + str(ioerr))
    return(all_athletes)

验证——数据存储和访问

负责存储和访问数据的代码模块(athletemodel.py)如下:

# -*- coding:utf-8 -
'''
Created on 2017-1-3

@author: lenovo
'''
import pickle
from athletelist import AthleteList

def get_coach_data(filename):
    try:
        with open(filename) as jaf:
            data=jaf.readline()
        templ = data.strip().split(',')
        return(AthleteList(templ.pop(0),templ.pop(0),templ))
    except IOError as ioerr:
        print('File error:'+str(ioerr))
        return(None)

def put_to_store(files_list):
    all_athletes = {}
    #定义字典,用于存储运动员对象
    for each_file in files_list:
        ath = get_coach_data(each_file)
        all_athletes[ath.name] = ath
    try:
        with open('athletes.pickle','wb') as athf:
            pickle.dump(all_athletes, athf)
    except IOError as ioerr:
        print('File error(put_to_store):' + str(ioerr))
    return(all_athletes)

def get_from_store():
    all_athletes = {}
    try:
        with open('athletes.picke','rb') as athf:
            all_athletes = pickle.load(athf)
    except IOError as ioerr:
        print('File error(get_from_store):' + str(ioerr))
    return(all_athletes)


Ok,来验证一下!

在IDLE中,打开athletemodel.py,按F5运行,然后,输入命令dir(),将会看到:

>>> dir()
['AthleteList', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'get_coach_data', 'get_from_store', 'pickle', 'put_to_store']

dir()的作用是什么呢?

“Python中内置的dir()函数用于列出一个定义对象的标识符。例如,对于一个模块,包括在模块中定义的函数,类和变量。当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表。当没有为其提供参数时, 它返回当前模块中定义的变量、属性、方法的列表。”

因此,我们可以发现,通过输入dir()它返回了当前模块中定义的方法、属性和变量的列表。

Ok,工具有了,我们设定要读取并存储的文件:

>>> the_files = ['sarah2.txt','james2.txt','mikey2.txt','julie2.txt']

存储数据:

>>> data = put_to_store(the_files)

查看一下:

>>> data
{'James Lee': ['2-34', '3:21', '2.34', '2.45', '3.01', '2:01', '2:01', '3:10', '2-22', '2-01', '2.01', '2:16'], 'Sarah Sweeney': ['2:58', '2.58', '2:39', '2-25', '2-55', '2:54', '2.18', '2:55', '2:55', '2:22', '2-21', '2.22'], 'Julie Jones': ['2.59', '2.11', '2:11', '2:23', '3-10', '2-23', '3:10', '3.21', '3-21', '3.01', '3.02', '2:59'], 'Mikey McManus': ['2:22', '3.01', '3:01', '3.02', '3:02', '3.02', '3:22', '2.49', '2:38', '2:40', '2.22', '2-31']}

果然,调用函数put_to_store(the_files)后,将文本文件转换成了字典。


数据存储好了(转换成实例了),下面来访问吧:

调用get_from_store()函数

>>> data_copy = get_from_store()

函数返回字典给data_copy,然后可以访问:

>>> data_copy = get_from_store()
>>> for each_athlete in data_copy:
    print(data_copy[each_athlete].name + ' ' + data_copy[each_athlete].dob)
    #注意调用的格式,字典中的每一个数据项都是AthleteList的对象


James Lee 2002-3-14
Sarah Sweeney 2002-6-17
Julie Jones 2002-8-17
Mikey McManus 2002-2-24

Ok,至此,有关数据的存储和读取方法告一段落。另,第一次用Markdown写文档,确实很简洁、很好用;对比word中需要反复调整格式,真的是太方便了,感谢开发者!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

O'Reilly之深入浅出Head First系列的中文版与英文版合集

Head First系列是O’Reilly出版社最成功的系列图书,自问世以来受到了无数读者的喜爱,并屡获大奖。其图文并茂,讲述编程技术由浅到深,也被称为“深入浅出”系列,是不可多得的各阶段程序员的参考...
  • Torchfire
  • Torchfire
  • 2013年10月05日 21:16
  • 41339

《HEAD FIRST JAVA》第一次回顾和整理

《HEAD FIRST JAVA》第一次回顾和整理 第一章 进入Java的世界(基本概念) 主要介绍了Java的工作原理,发展简史,程序结构和一些简单的语法。学过其他语言的人表示这章完全没有压力。...
  • zhanghongzheng3213
  • zhanghongzheng3213
  • 2016年06月07日 18:02
  • 1642

<Head First Java>学习笔记--第二章:类与对象

一、椅子大战这一部分形象生动的讲述了面向过程和面向对象的主要区别。1、程序需求(1)、第1次需求如下: (2)、第2次需求新增一个阿米巴形状的旋转和播放声音,并且旋转的中心点与其他形状的不一样。...
  • encourage2011
  • encourage2011
  • 2015年04月14日 18:58
  • 1881

Head First Python的电子书

  • 2015年05月22日 18:33
  • 31.12MB
  • 下载

Python下web服务器的原始实现(socket)《Head First Python》第七章

Python下web服务器的演化原始实现VS框架实现 “掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让你永远不被淘汰。不要被工具限制了自己的发展。” 在当今Python服务器框架 (f...
  • zhou8201
  • zhou8201
  • 2017年01月09日 23:14
  • 267

cgi.FieldStorage()获取网页间提交的数据《Head First Python》第七章

To get at submitted form data, it’s best to use the FieldStorage class. The other classes defined in...
  • zhou8201
  • zhou8201
  • 2017年01月13日 22:27
  • 838

python 第七章 web开发 代码

  • 2016年09月18日 11:50
  • 61KB
  • 下载

CGI-Web服务器接收并显示数据 《Head First Python》第九章

实现效果 提交时间的网页test_form.py将数据提交至add_timing_data.py后,后者将前者传送的关键数据显示出来。 代码 test_form.pyimport yate pri...
  • zhou8201
  • zhou8201
  • 2017年01月29日 08:14
  • 282

Java Web开发详解电子书+源码共3卷 2

  • 2013年11月04日 22:35
  • 50MB
  • 下载

Java Web开发详解电子书+源码共3卷 3

  • 2013年11月04日 22:47
  • 48.55MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《Head First Python》 第七章 Web开发之——数据建模 (电子书247-250)
举报原因:
原因补充:

(最多只允许输入30个字)