前面介绍了自定义格式化输出列表函数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')

附:列表数据

Head First Python-Python简单处理文件的更多相关文章

  1. Python通过简单的文件读写,来实现注册登录

    # -*- coding:utf-8 -*- '''''' username = input('请输入您的姓名:') password = input('请输入密码:') with open('get ...

  2. python反转字符串(简单方法)及简单的文件操作示例

    Python反转字符串的最简单方法是用切片: >>> a=' >>> print a[::-1] 654321 切片介绍:切片操作符中的第一个数(冒号之前)表示切片 ...

  3. python使用简单http协议来传送文件

    python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...

  4. python第一天(文件流以及控制流)简单总结

    第一天的python学习主要是: (1)对python的一个大致了解 值得注意的是在window下开发要注意path的问题. (2)对python控制流的一个了解 常用的if ,while ,for ...

  5. python中简单文件的输入三种方式

    最近在自学python,简单的总结了一下文件的输入的方式. 1. f=open("foo.txt") line=f.readline() while line: print(lin ...

  6. Python实现简单登陆验证(文件操作)

    利用python编写一个简单的登陆验证 代码主要功能: 利用Python实现简单的登陆验证,代码主要有两个部分组成: 第一部分:登陆页面,作用是实现用户名和密码的输入 利用两个输入函数input()来 ...

  7. Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程

    BOOTP-TFTP-FTP 目录 文件传输流程 服务器建立过程 客户端建立过程 1 文件传输流程 / File Transfer Flow 利用BOOTP,TFTP,FTP三种传输协议,建立起客户端 ...

  8. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  9. Python 实现简单的 Web

    简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...

  10. python批量处理excel文件数据

    https://www.zhihu.com/question/39299070?sort=created 作者:水中柳影链接:https://www.zhihu.com/question/392990 ...

随机推荐

  1. 使用Python进行OCR -- 识别图片中的文字

    工具 Tesseract pytesseract tesserocr 朋友需要一个工具,将图片中的文字提取出来.我帮他在网上找了一些OCR的应用,都不好用.所以准备自己研究,写一个Web APP供他使 ...

  2. 使用pytesseract出现的问题

    dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib Referenced from: /usr/local/lib/li ...

  3. Ubuntu 终端关机和重启命令

    原文地址:https://blog.csdn.net/zzc15806/article/details/80907779 (diss一下原文地址的作者,你也是转载的为何不添加原文链接?) 重启命令:1 ...

  4. C++设计模式——观察者模式

    观察者模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动 ...

  5. CSS圆环百分比DEMO

    <html> <head> <title>test</title><!--本DEMO参考http://www.cnblogs.com/jr1993 ...

  6. (原创)cocos lua 热更新从零开始(一)最简单demo

    开发环境:WIN7 + cocos2dx 3.10 lua版本 0.学习这篇内容的基础是你要会创建并运行一个cocos lua项目 1.热更新的思想所谓的热更新,就是在线更新代码和资源.热更新的过程首 ...

  7. Three teachers who make differences in my life

    人生路漫漫,从小到大,经历过九年义务教育的我们也受到过很多老师的熏陶,而已经进入大学的我也会回想起那些给我带来别样意义的老师们. 亲爱的老李-老李是我初中的班主任,也是我的历史老师.依稀记得上他的课会 ...

  8. [方案]基于Zynq WiFi方案构建

    基于Zynq系列,搭建无线传输平台 1) 2.4G 2) 5G AC

  9. SpringBoot之hello world!

    哈哈哈,还是在元旦这一天对你下手了.麻溜的给自己充电,在这个寒冬,不断听到裁员的消息或者新闻,可对于我这个外包和外派的人来说,好像并没有受到什么影响.可能是人手不够可能是项目很忙.对于明年的三月金四月 ...

  10. 【Android】webview javascript 注入方法

    Android中向webview注入js代码可以通过webview.loadUrl("javascript:xxx")来实现,然后就会执行javascript后面的代码. 但是当需 ...