Python中的sorted函數(shù)應(yīng)用及文件操作詳解

這篇文章主要介紹了Python中的sorted函數(shù)應(yīng)用及文件操作詳解,python只能將字符串寫入到文本文件,要將數(shù)值數(shù)據(jù)存儲(chǔ)到文本本件中,必須先試用函數(shù)str()將其轉(zhuǎn)換為字符串格式,需要的朋友可以參考下

Python的sorted函數(shù)及文件操作

眾所周知,def __cmp__ 作為方法存在,用sort對(duì)實(shí)例進(jìn)行排序時(shí),會(huì)用到class 中的__cmp__。但是,在python3中,取消了 sorted對(duì)cmp的支持。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

python3 中有關(guān)排序的sorted方法如下:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

sorted(iterable,key=None,reverse=False)

其中,key 接受一個(gè)函數(shù),這個(gè)函數(shù)只接受一個(gè)元素,默認(rèn)為 None。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

reverse是一個(gè)布爾值。如果設(shè)置為 True,列表元素將被倒序排列,默認(rèn)為 False。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

下面著重介紹 key 的作用原理:key 指定一個(gè)接收一個(gè)參數(shù)的函數(shù),這個(gè)函數(shù)用于從每個(gè)元素中提取一個(gè)用于比較的關(guān)鍵字。默認(rèn)值為 None 。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)]
sorted(students,key=lambda s: x[2]) #按照年齡來排序

結(jié)果:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

[('dave','B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

這是一個(gè)字符串排序,排序規(guī)則:小寫<大寫<奇數(shù)<偶數(shù) s = 'asdf234GDSdsf23' 原理:先比較元組的第一個(gè)值,如果相等就比較元組的下一個(gè)值,以此類推。 先看一下 Boolean value 的排序:print(sorted([True,Flase]))===>結(jié)果[False,True]文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

Boolean 的排序會(huì)將 False 排在前,True 排在后。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

x.isdigit()的作用是把數(shù)字放在前邊,字母放在后邊.文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

x.isdigit() and int(x) % 2 == 0 的作用是保證奇數(shù)在前,偶數(shù)在后。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/45864.html

x.isupper()的作用是在前面基礎(chǔ)上,保證字母小寫在前大寫在后.

最后的 x 表示在前面基礎(chǔ)上,對(duì)所有類別數(shù)字或字母排序。

最后結(jié)果:

addffssDGS33224

一道面試題:

list1=[7, -8, 5, 4, 0, -2, -5]
#要求1.正數(shù)在前負(fù)數(shù)在后 2.正數(shù)從小到大 3.負(fù)數(shù)從大到小
sorted(list1,key=lambda x:(x<0,abs(x)))

解題思路:先按照正負(fù)排先后,再按照大小排先后。

Python下文件操作與Java差不多。打開文件的模式有三種:

- r,只讀模式(默認(rèn))。

- w,只寫模式?!静豢勺x;不存在則創(chuàng)建;存在則刪除內(nèi)容;因?yàn)闀?huì)清空原有文件的內(nèi)容,一定要慎用】

- a,追加模式?!究勺x; 不存在則創(chuàng)建;存在則只追加內(nèi)容;】

注意最后要記得關(guān)閉文件:f.close()

python只能將字符串寫入到文本文件。要將數(shù)值數(shù)據(jù)存儲(chǔ)到文本本件中,必須先試用函數(shù)str()將其轉(zhuǎn)換為字符串格式。

#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())
#以列表的方式讀取這個(gè)文件
f = open('yesterday','r',encoding='utf-8')
for line in f.readlines():
    print(line)
#對(duì)文件的第3行,做一個(gè)特殊的打?。ㄟ@種方式比較低效,因?yàn)樗鼤?huì)先把文件全部讀取到內(nèi)存中,文件較大時(shí)會(huì)很影響性能)
f = open('yesterday','r',encoding='utf-8')
for index,line in enumerate(f.readlines()):
    if index == 2:
        print('-----測(cè)試線----',line)
        continue
    print(line)
#比較高效的,逐行讀取文件內(nèi)容,因?yàn)樗且恍幸恍械娜プx取文件,不會(huì)先把文件一次性全部讀取到內(nèi)存中
f = open('yesterday','r',encoding='utf-8')
for line in f:
    print(line)
#比較高效的,對(duì)文件的3三行進(jìn)行過特殊打印
f = open('yesterday','r',encoding='utf-8')
count = 0
for line in f:
    if count == 2:
        print('------測(cè)試線----:',line)
    count += 1
    print(line)
#w模式(如果沒有就創(chuàng)建文件,如果有就清空文件,一定要慎用)
f = open('yesterday','w',encoding='utf-8')
f.write("這就是一行測(cè)試\n")
f.write("測(cè)試2\n")
f.write("測(cè)試3")
#a模式(追加模式,如果沒有就創(chuàng)建文件,如果有就把內(nèi)容追加進(jìn)去)
f = open('yesterday','a',encoding='utf-8')
f.write("test1\n")
#文件光標(biāo)的操作
f = open('yesterday','r',encoding='utf-8')
#獲得文件的光標(biāo)
print(f.tell())
print(f.readline())
print(f.tell())
#回到最開始的位置(也可以指定一個(gè)位置,前提是你得知道你去往的字符具體在哪個(gè)位置才行)
f.seek(0)
#顯示文件的編碼
print(f.encoding)
#顯示文件句柄的編號(hào)(我并不確定這個(gè)說法是否正確,用到時(shí)請(qǐng)仔細(xì)去查一下)
print(f.fileno())
#測(cè)試是否是一個(gè)終端設(shè)備文件
print(f.isatty())
#把緩存的內(nèi)容刷新到硬盤(進(jìn)度條那個(gè)腳本里有寫一個(gè)示例)
f.flush()
#指定文件從哪里開始截?cái)?,如果沒有參數(shù),默認(rèn)從0開始等于清空了這個(gè)文件
#f.truncate()
#r+ 模式(讀,追加模式)
f = open('yesterday','r+',encoding='utf-8')
data = f.read()
print(data)
f.write("test...\n")
#還有 w+寫讀模式, a+追加讀模式,這一般不用,真用到了再去了解下吧
#rb 模式,以二進(jìn)制的方式讀取這個(gè)文件
#wb 模式,二進(jìn)制寫
'''
'''
#with語句(很實(shí)用,記得要經(jīng)常用喲~,在《Python編程從入門到實(shí)戰(zhàn)》那本書里的文件與異常那一章有詳細(xì)用法)
#為了避免打開文件后忘記關(guān)閉,可以通過管理上下文,即:
with open('log','r') as f:
    ...
#如此方式,當(dāng)with代碼塊執(zhí)行完畢時(shí),內(nèi)部會(huì)自動(dòng)關(guān)閉并釋放文件資源。
#在Python 2.7 后,with又支持同時(shí)對(duì)多個(gè)文件的上下文進(jìn)行管理,即:
with open('log1') as obj1, open('log2') as obj2:
    pass

到此這篇關(guān)于Python中的sorted函數(shù)應(yīng)用及文件操作詳解的文章就介紹到這了

 

繼續(xù)閱讀
我的微信
微信掃一掃
weinxin
我的微信
惠生活福利社
微信掃一掃
weinxin
我的公眾號(hào)
 

發(fā)表評(píng)論

匿名網(wǎng)友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖動(dòng)滑塊以完成驗(yàn)證