zoukankan      html  css  js  c++  java
  • Head First Python-Python简单处理文件

    前面介绍了自定义格式化输出列表函数printList(),下面再介绍下格式化列表项列表项的排序

     这里有一组列表数据,记录运动员跑步时间的,要求按照时间大小进行排序。这里每项数据记录的时间格式不一样,无法统一排序。(对字符串排序时,短横线-排在点号前面,点号.在冒号:前面。)

     直接排序:

    def get_coach_data(filename):
        try:
            with open(filename) as fn:
                data=fn.readline()
                temp_data=data.strip().split(',') #方法串链
            return (sorted(temp_data))
        except IOError as ioe:
            print('File Error: '+str(ioe))
            return (None)
    james=get_coach_data('./data/james.txt')
    print(james)

    结果:

     我们可以自定义一个函数sanitize()来处理列表项,统一下格式问题。

    1,列表迭代

    #列表迭代
    def sanitize(time_string):
        if '-'in time_string:
            spliter='-'
        elif ':' in time_string:
            spliter=':'
        else:
            return (time_string)
        (mins,secs)=time_string.split(spliter)
        return (mins +'.'+secs)
    
    with open('./data/james.txt') as j:
        data=j.readline()
        temp_james=data.strip().split(',')
        james=[]
        for a in temp_james:
            james.append(sanitize(a))
    print(james)

    这里我们将一个列表转换为另一个列表要做4件事:

    创建一个新列表来存放转换后的数据,迭代处理原列表中的各个数据项,每次迭代时完成转换,将转换后的数据追加到新列表。

    2,列表推导

    列表推导也可以完成上面的功能(排序)。

    #列表推导
    def sanitize(time_string):
        if '-'in time_string:
            spliter='-'
        elif ':' in time_string:
            spliter=':'
        else:
            return (time_string)
        (mins,secs)=time_string.split(spliter)
        return (mins +'.'+secs)
    
    with open('./data/james.txt') as j:
        data=j.readline()
        temp_james=data.strip().split(',')
        james=[sanitize(i) for i in temp_james] #列表推导
    print(james)

    这里不需要append()方法。

    处理好数据后来进行排序,分析所给的数据发现里面有重复项,我们可以用set()来进行处理。

    #列表去重
    def sanitize(time_string):
        if '-'in time_string:
            spliter='-'
        elif ':' in time_string:
            spliter=':'
        else:
            return (time_string)
        (mins,secs)=time_string.split(spliter)
        return (mins +'.'+secs)
    
    with open('./data/james.txt') as j:
        data=j.readline()
        temp_james=data.strip().split(',')
        james=[sanitize(i) for i in temp_james]
        unique_james=[]
        for j in james:#使用迭代删除重复
            if j not in unique_james:
                unique_james.append(j)
    print(unique_james[0:3]) #列表分片
    print(sorted(set(james)))#使用集合删除重复

    运行结果如下:

    我们可以将打开文件部门放在一个自定义的函数里:

    def get_coach_data(filename):
        try:
            with open(filename) as fn:
                data=fn.readline()
                temp_data=data.strip().split(',')
                f_data=[sanitize(d) for d in temp_data]
            return (f_data)
        except IOError as ioe:
            print('File Error: '+str(ioe))
            return (None)
    
    james=get_coach_data('./data/james.txt')

    附:列表数据

  • 相关阅读:
    json页面解析
    map判断
    将页面中所有的checkbox设成单选得
    配置两个环境变量:
    一个input框边输入,另外一个input框中边显示的触发事件
    页面tr和td的的隐藏与显示
    判断声明出来的list为空的时候,list!=null
    从一个表中往另外一个表中插入数据用到的SQL
    final使用方法
    Android学习笔记(23):列表项的容器—AdapterView的子类们
  • 原文地址:https://www.cnblogs.com/hoaprox/p/9598994.html
Copyright © 2011-2022 走看看