zoukankan      html  css  js  c++  java
  • Python的数据处理学习(二)

    本文参考Paul Barry所著的《Head First Python》一书,参考代码均可由http://python.itcarlow.ie/站点下载。本文若有任何谬误希望不吝赐教~

    二. 代码模块
     
    1. 准备学习
     
    (1)数据读取
    with open(james.txt) as jaf: #打开文件
        data = jaf.readline() #读数据行
     james =data.strip().split(',') #将数据转换为列表
     
    说明:data.strip().split(',')叫做方法串链,strip()应用到data中的数据行,去除字符串中所有的空白符,处理后的结果由第二个方法split(',')处理,split(',')表示将结果以,形式分割开,返回列表。
     
    (2)数据清理
    定义函数sanitize(),将各个选手成绩的列表格式统一为mins.secs格式
    def sanitize(time_string):
        if '-' in time_string:
            splitter = '-'
        if ':' in time_string:
            splitter = ':'
        else:
            return(time_string)
    (mins,secs) = time_string.split(splitter)
    return(mins + '.' + secs)
     
    说明:split是内置函数,表示字符串的分解
     
    (3) 转换列表---推导列表
    分别举例普通列表转换方法与利用推导列表的方式:
    clean_mikey = [] #列表创建
    for each_t in mikey: #迭代
        clean_mikey.append(sanitize(each_t)) #转换与追加
    等价于
    clean_mikey = [sanitize(each_t) for each_t in mikey]
     
    说明:sanitize()为自定义的一个数据清理函数,内置函数sorted是对整个列表排序
     
    (4) 删除重复数据--not in
    列表操作方法:
    unique_james = []
    for each_t in james:
        if each_t not in unique_james:
            unique_james.append(each_t)
    集合操作方法:(python集合突出特点,就是集合中数据项的无序性,且不允许重复)
    示例: 
    distances = set(james)
     
    (5)“分片”,访问列表中多个列表项
    print(sorted(set([sanitize(t)] for t in james]))[0:3])
     
    (6)将多个重复代码改为函数
    def get_coach_data(filename):
        try:
            with open(filename) as af:
                return(data.strip().split(','))
        except IOError as ioerr:
            print('File error:' + str(ioerr))
            return(None)
     
    2. 定制数据对象
     
    (1)新数据格式,James2.txt,Julie2.txt,Mikey2.txt,Sarah2.txt,文件分别打开如下:(全名, 出生日期, 训练成绩)
    James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16
    Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21,3.01,3.02,2:59
    Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55,2:22,2-21,2.22
    Mikey McManus,2002-2-24,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38,2:40,2.22,2-31
     
    (2)数据抽取:(以Sarah为例)
    Sarah = get_coach_data('sarah2.txt')
    (sarah_name,sarah_dob) = sarah.pop(0),sarah.pop(0)
    pop(0)调用将删除并返回列表最前面的数据项,并赋值给指定变量姓名和出生日期
     
    (3)使用字典关联数据,字典是一种内置的数据结构,允许将数据和键而不是数字关联,这样可以使内存中的数据与实际数据的结构保持一致。
    比如,键                   关联的数据
            Name     ——> Sarah Sweeney
            DOB      ——> 2002-6-17
            Times    ——> 2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55,2:22,2-21,2.22
    创建字典的方式:
              大括号创建:cleese = {}
              工厂函数:   palin = dict()
    增加数据两种方式:
              cleese['Name'] = 'John Cleese'
              palin = {'Name': 'Michael Palin'}
     
    (4)应用:
            sarah_data = {}
            sarah_data['Name'] = sarah.pop(0)
            sarah_data['DOB'] = sarah.pop(0)
            sarah_data['Times'] = sarah
            print(sarah_data['Name' + "'s fastest times are: " + str(sorted(set[sanitize(t) for t in sarah_data['Times']]))[0:3]))
     
    (5)一次性完成字典的创建,并返回字典
    def get_coach_data(filename):
        try:
            with open(filename) as f:
                data = f.readline()
            templ = data.strip().split(',')
            return({'Name':templ.pop(0),
                        'DOB':templ.pop(0),
                         'Times':str(sorted(set([sanitize(t) for t in templ]))[0:3])})
        except IOError as ioerr:
            print('File error:' + str(ioerr))
            return(None)
     
    (6)将代码及其数据打包在类中
    class Athlete:
        def __init__(self,a_name,a_dob,a_times=[]):
            self.name = a_name
            self.dob=a_dob
            self.times=a_times
       
       def top3(self):
           return(sorted(set([sanitize(t) for t in self.times]))[0:3])
       
       def get_coach_data(filename):
           try:
            with open(filename) as f:
                data = f.readline()
            templ = data.strip().split(',')
            return(Athlete(templ.pop(0),templ.pop(0),templ)
         except IOError as ioerr:
            print('File error:' + str(ioerr))
            return(None)
     
    (7)类调用与结果输出
    james = get_coach_data('james2.txt')
    结果输出:
    James Lee's fastest times are: ['2.01','2.16','2.22']
     
    下一节课讲类的继承
  • 相关阅读:
    玩转xss
    Anonim小白成长计划
    mssql注入与绕过
    了解mssql数据库
    2020年度学习规划
    access 注入
    bypasswaf 之报错注入
    bypasswaf之盲注
    sql注入常用函数与bypasswaf
    一篇关于数据库的另类操作
  • 原文地址:https://www.cnblogs.com/I-Tegulia/p/4191658.html
Copyright © 2011-2022 走看看