目的:将几个记录时间时刻的数据格式化统一,然后进行排序。
1.前提
有四个文件,文件的格式都不一样,都表示时间
james.txt
‘2-34‘, ‘3:21‘, ‘2.34‘, ‘2.45‘, ‘3.01‘, ‘2:01‘, ‘2:01‘, ‘3:10‘, ‘2-22‘
julie.txt
‘2.59‘, ‘2.11‘, ‘2:11‘, ‘2:23‘, ‘3-10‘, ‘2-23‘, ‘3:10‘, ‘3.21‘, ‘3-21‘
mikey.txt
‘2:22‘, ‘3.01‘, ‘3:01‘, ‘3.02‘, ‘3:02‘, ‘3.02‘, ‘3:22‘, ‘2.49‘, ‘2:38‘
sarah.txt
‘2:58‘, ‘2.58‘, ‘2:39‘, ‘2-25‘, ‘2-55‘, ‘2:54‘, ‘2.18‘, ‘2:55‘, ‘2:55‘
2.格式化数据
四个文件格式不统一,时间点之间有‘.’,有‘:’,还有‘-’,先使用一个函数将其转化为:全是’.’的格式,如:‘3.01’,代码如下:
def sanitize(time_string):
if ‘-‘ in time_string:
splitter = ‘-‘
elif ‘:‘ in time_string:
splitter = ‘:‘
else:
return(time_string)
(mins, secs) = time_string.split(splitter)
return(mins + ‘.‘ + secs)
截图代码如下:
3.排序
python中排序有两种,一种是直接sort(list),另外一种是使用sorted(list)。
第一种会直接覆盖原来的数据,第二种是新建一个副本将数据放进去,原来的变量值不变。
整体代码如下:
with open(‘james.txt‘) as jaf:
data = jaf.readline()
james = data.strip().split(‘,‘)
with open(‘julie.txt‘) as juf:
data = juf.readline()
julie = data.strip().split(‘,‘)
with open(‘mikey.txt‘) as mif:
data = mif.readline()
mikey = data.strip().split(‘,‘)
with open(‘sarah.txt‘) as saf:
data = saf.readline()
sarah = data.strip().split(‘,‘)
print(sorted([sanitize(t) for t in james]))
print(sorted([sanitize(t) for t in julie]))
print(sorted([sanitize(t) for t in mikey]))
print(sorted([sanitize(t) for t in sarah]))
4.测试结果
截图代码:
上面的后面三局是将for循环和排序写在一起了,比较如下图:
说明:这个格式真的是有点虐心,不按照找个格式输出,IDLE还报错,我真的是无语了,调试了好久,代码没问题,就是格式问题。让我揪心呀。比如下面这幅图:
测试结果数据:
[‘2.01‘, ‘2.01‘, ‘2.22‘, ‘2.34‘, ‘2.34‘, ‘2.45‘, ‘3.01‘, ‘3.10‘, ‘3.21‘]
[‘2.11‘, ‘2.11‘, ‘2.23‘, ‘2.23‘, ‘2.59‘, ‘3.10‘, ‘3.10‘, ‘3.21‘, ‘3.21‘]
[‘2.22‘, ‘2.38‘, ‘2.49‘, ‘3.01‘, ‘3.01‘, ‘3.02‘, ‘3.02‘, ‘3.02‘, ‘3.22‘]
[‘2.18‘, ‘2.25‘, ‘2.39‘, ‘2.54‘, ‘2.55‘, ‘2.55‘, ‘2.55‘, ‘2.58‘, ‘2.58‘]
默认地,sort()方法和sorted() BIF都会按升序对数据进行排序。要以降序对数据进行排序,需要向sort()或sorted()传入参数reverse=Treue,python会负责具体处理。
参考书籍:《Head First Python》Barry.
时间: 2024-10-12 20:07:24