標籤:python 資料 格式化 排序
目的:將幾個記錄時間時刻的資料格式化統一,然後進行排序。
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.
Python系列-格式化資料並排序