這篇文章主要介紹了Python中的sorted函數應用及文件操作詳解,python只能將字符串寫入到文本文件,要將數值數據存儲到文本本件中,必須先試用函數str()將其轉換為字符串格式,需要的朋友可以參考下
Python的sorted函數及文件操作
眾所周知,def __cmp__ 作為方法存在,用sort對實例進行排序時,會用到class 中的__cmp__。但是,在python3中,取消了 sorted對cmp的支持。文章源自四五設計網-http://www.wasochina.com/45864.html
python3 中有關排序的sorted方法如下:文章源自四五設計網-http://www.wasochina.com/45864.html
sorted(iterable,key=None,reverse=False)
其中,key 接受一個函數,這個函數只接受一個元素,默認為 None。文章源自四五設計網-http://www.wasochina.com/45864.html
reverse是一個布爾值。如果設置為 True,列表元素將被倒序排列,默認為 False。文章源自四五設計網-http://www.wasochina.com/45864.html
下面著重介紹 key 的作用原理:key 指定一個接收一個參數的函數,這個函數用于從每個元素中提取一個用于比較的關鍵字。默認值為 None 。文章源自四五設計網-http://www.wasochina.com/45864.html
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)] sorted(students,key=lambda s: x[2]) #按照年齡來排序
結果:文章源自四五設計網-http://www.wasochina.com/45864.html
[('dave','B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
這是一個字符串排序,排序規則:小寫<大寫<奇數<偶數 s = 'asdf234GDSdsf23' 原理:先比較元組的第一個值,如果相等就比較元組的下一個值,以此類推。 先看一下 Boolean value 的排序:print(sorted([True,Flase]))===>結果[False,True]文章源自四五設計網-http://www.wasochina.com/45864.html
Boolean 的排序會將 False 排在前,True 排在后。文章源自四五設計網-http://www.wasochina.com/45864.html
x.isdigit()的作用是把數字放在前邊,字母放在后邊.文章源自四五設計網-http://www.wasochina.com/45864.html
x.isdigit() and int(x) % 2 == 0 的作用是保證奇數在前,偶數在后。文章源自四五設計網-http://www.wasochina.com/45864.html
x.isupper()的作用是在前面基礎上,保證字母小寫在前大寫在后.
最后的 x 表示在前面基礎上,對所有類別數字或字母排序。
最后結果:
addffssDGS33224
一道面試題:
list1=[7, -8, 5, 4, 0, -2, -5] #要求1.正數在前負數在后 2.正數從小到大 3.負數從大到小 sorted(list1,key=lambda x:(x<0,abs(x)))
解題思路:先按照正負排先后,再按照大小排先后。
Python下文件操作與Java差不多。打開文件的模式有三種:
- r,只讀模式(默認)。
- w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;因為會清空原有文件的內容,一定要慎用】
- a,追加模式。【可讀; 不存在則創建;存在則只追加內容;】
注意最后要記得關閉文件:f.close()
python只能將字符串寫入到文本文件。要將數值數據存儲到文本本件中,必須先試用函數str()將其轉換為字符串格式。
#r模式(只讀模式) f = open('yesterday',encoding='utf-8') data = f.read() f.close() print(data) #只讀文件的前5行: f = open('yesterday','r',encoding='utf-8') for i in range(5): print(f.readline()) #以列表的方式讀取這個文件 f = open('yesterday','r',encoding='utf-8') for line in f.readlines(): print(line) #對文件的第3行,做一個特殊的打印(這種方式比較低效,因為它會先把文件全部讀取到內存中,文件較大時會很影響性能) f = open('yesterday','r',encoding='utf-8') for index,line in enumerate(f.readlines()): if index == 2: print('-----測試線----',line) continue print(line) #比較高效的,逐行讀取文件內容,因為它是一行一行的去讀取文件,不會先把文件一次性全部讀取到內存中 f = open('yesterday','r',encoding='utf-8') for line in f: print(line) #比較高效的,對文件的3三行進行過特殊打印 f = open('yesterday','r',encoding='utf-8') count = 0 for line in f: if count == 2: print('------測試線----:',line) count += 1 print(line) #w模式(如果沒有就創建文件,如果有就清空文件,一定要慎用) f = open('yesterday','w',encoding='utf-8') f.write("這就是一行測試\n") f.write("測試2\n") f.write("測試3") #a模式(追加模式,如果沒有就創建文件,如果有就把內容追加進去) f = open('yesterday','a',encoding='utf-8') f.write("test1\n") #文件光標的操作 f = open('yesterday','r',encoding='utf-8') #獲得文件的光標 print(f.tell()) print(f.readline()) print(f.tell()) #回到最開始的位置(也可以指定一個位置,前提是你得知道你去往的字符具體在哪個位置才行) f.seek(0) #顯示文件的編碼 print(f.encoding) #顯示文件句柄的編號(我并不確定這個說法是否正確,用到時請仔細去查一下) print(f.fileno()) #測試是否是一個終端設備文件 print(f.isatty()) #把緩存的內容刷新到硬盤(進度條那個腳本里有寫一個示例) f.flush() #指定文件從哪里開始截斷,如果沒有參數,默認從0開始等于清空了這個文件 #f.truncate() #r+ 模式(讀,追加模式) f = open('yesterday','r+',encoding='utf-8') data = f.read() print(data) f.write("test...\n") #還有 w+寫讀模式, a+追加讀模式,這一般不用,真用到了再去了解下吧 #rb 模式,以二進制的方式讀取這個文件 #wb 模式,二進制寫 ''' ''' #with語句(很實用,記得要經常用喲~,在《Python編程從入門到實戰》那本書里的文件與異常那一章有詳細用法) #為了避免打開文件后忘記關閉,可以通過管理上下文,即: with open('log','r') as f: ... #如此方式,當with代碼塊執行完畢時,內部會自動關閉并釋放文件資源。 #在Python 2.7 后,with又支持同時對多個文件的上下文進行管理,即: with open('log1') as obj1, open('log2') as obj2: pass
到此這篇關于Python中的sorted函數應用及文件操作詳解的文章就介紹到這了


評論