1.集合的操做html
2.文件的操做python
1.集合的操做ide
1.不一樣元素組成,自動去重編碼
2.無序spa
3.集合中的元素必須是不可變類型指針
1.集合的定義:code
1 >>> s1 = set('abcd') #同s1 = set{'a','b','c','d'} 2 >>> s1 3 {'a', 'c', 'b', 'd'} 4 >>> t1 = set('cdef') 5 >>> t1 6 {'c', 'f', 'e', 'd'} 7 >>> un_set = set('hello') 8 >>> un_set 9 {'h', 'e', 'o', 'l'} 10 >>> #set是去重的 11 >>> un_set = frozenset(un_set) #定義只讀集合 12 >>> un_set 13 frozenset({'h', 'e', 'o', 'l'}) 14 >>> #定義只讀集合
2.集合的運算:htm
集合之間也可進行數學集合運算(例如:並集、交集等),可用相應的操做符或方法來實現。blog
#子集內存
>>> s1 = set('abcd') >>> t1 = set('cdef') >>> C = set('ab') >>> C>s1 #判斷C是否爲S1子集,用符號表示 False >>> C < s1 True >>> C.issubset(s1) #用方法.issubset()表示 True
#交集:全部的相同元素的集合
1 >>> t1 = set('cdef') 2 >>> s1 = set('abcd') 3 >>> i = s1 & t1 4 >>> i 5 {'c', 'd'} 6 >>> s1.intersection(t1) 7 {'c', 'd'}
#並集:集合中全部元素的集合,重複元素只出現一次
1 >>> s1 | t1 #符號表示 2 {'f', 'e', 'a', 'c', 'b', 'd'} 3 >>> s1.union(t1) #方法表示 4 {'f', 'e', 'a', 'c', 'b', 'd'}
#差集:s1和t1的差集,全部屬於s1且不屬於t1的元素集合
>>> s1 - t1 {'a', 'b'} >>> s1.difference(t1) {'a', 'b'}
#對稱差集,s1和t1去掉公共元素後,其他元素的集合
1 >>> s1 ^ t1 2 {'f', 'e', 'a', 'b'} 3 >>> s1.symmetric_difference(t1) 4 {'f', 'e', 'a', 'b'}
3.集合的方法
參考博客,很是詳細:https://www.cnblogs.com/suendanny/p/8597596.html
1 #方法 2 >>> s = {1,2,3,4,5} 3 >>> s.add('s') #增長元素 4 >>> s 5 {'s', 1, 2, 3, 4, 5} 6 >>> 7 >>> s.clear() #清空集合 8 >>> s 9 set() 10 >>> 11 >>> s = {1,2,3,4,5} 12 >>> s 13 {1, 2, 3, 4, 5} 14 >>> new_s = s.copy() #淺copy 15 >>> new_s 16 {1, 2, 3, 4, 5} 17 >>> 18 >>> 19 >>> #pop() 20 >>> s.pop() #隨機刪除,若無,會報錯 KeyError 21 1 22 >>> s 23 {2, 3, 4, 5} 24 >>> 25 >>> 26 >>> s.remove(2) #刪除指定元素,若指定元素不存在,會報錯 KeyError 27 >>> s 28 {3, 4, 5} 29 >>> 30 >>> s.discard("3") #刪除集合中的一個元素,若是元素不存在,則不執行任何操做 31 >>> s 32 {3, 4, 5} 33 >>> 34 >>> s.discard(3) 35 >>> s 36 {4, 5} 37 >>> 38 39 >>> # 並集.union() 符號:| 全部元素的集合,重複元素只出現一次 40 >>> # 交集 .intersection() 符號:& 全部相同元素的集合 41 >>> # 子集.issubset() 符號:< 判斷是不是子集 42 >>> # 父集.isuperset() 符號:> 判斷是不是父集 43 >>> # 差集.difference() 符號:- 全部屬於s1且不屬於t1的元素構成新的set 44 45 >>> # 對稱差集 .symmetric_difference() 符號:^ 46 #對稱差集,去掉公共元素後,其他元素的集合 47 48 49 50 >>> s1 51 {'a', 'c', 'b', 'd'} 52 >>> t1 53 {'c', 'f', 'e', 'd'} 54 >>> s1.intersection_update(t1) #用s1與t1的交集,來替換爲s1 55 >>> s1 56 {'c', 'd'} 57 58 59 >>> s1 = {1,2} 60 >>> t1 = {2,3,4} 61 >>> s1.update(t1) #update 62 >>> s1 63 {1, 2, 3, 4} 64 >>> 65 >>> s1.update(['h','i'],{4,5,6}) #方法中直接添加元素,可list和set 66 >>> s1 67 {1, 2, 3, 4, 'h', 5, 6, 'i'} 68 >>> 69 70 71 >>> s1 72 {1, 2, 3, 4, 'h', 5, 6, 'i'} 73 >>> t1 74 {2, 3, 4} 75 >>> s = {555,666} 76 >>> 77 >>> s1.isdisjoint(t1) #若s1和t1不存在交集,返回true,不然返回false 78 False 79 >>> s1.isdisjoint(s) 80 True 81 >>> 82 83 >>> s1 = {1,2,3,4} 84 >>> t1 = {2,3,5} 85 >>> s1.difference_update(t1) #用s1與t1的差集更新替換爲s1 86 >>> s1 87 {1, 4} 88 89 90 >>> s1 = {1,2,3,4} 91 >>> t1 = {2,3,5} 92 >>> s1.symmetric_difference_update(t1) #用s1與t1的對稱差集更新替換爲s1 93 >>> s1 94 {1, 4, 5}
1.文件的打開模式
2.文件的讀取:注意每次打開文件最後都須要 file.close() 進行關閉,也可直接使用【with】語句打開,其能夠自動關閉,具體以下所示:
1 f = open("yesterday.txt",'r',encoding="utf-8") #文件的句柄,」r「是以只讀模式打開 2 3 print(f.read) #讀取yesterday.txt文件內容 4 print(f.readline) #讀取一行,yesterday.txt文件內容 5 print(f.readlines) #將文件輸出爲一個列表,每一行爲列表的一個元素 6 f.close() 7 8 #建議的寫法,逐行讀寫,在第十行打印分割線 9 count = 0 10 for i in f: 11 count +=1 12 if count == 10: 13 print("我是分割線".center(40,'-')) 14 print(i) 15 16 for i in range(5): #行數少的時候打印前五行 17 print(f.readline()) 18 19 20 #逐行讀取文件,在第十行的時候輸出分割線,佔內存較多的寫法,不建議 21 for index,i in enumerate(f.readlines()): 22 if index == 9: 23 print("我是分割線".center(40,"-")+"\n") 24 print(i)
25
#讀取指定路徑的文件
file_path = r'C:\Users\15302\PycharmProjects\GKXXX\day2\yesterday.txt' #注意因爲路徑中出現 ‘\U’在python中此轉義符其後爲Unicode編碼,故此處路徑要前要加 【r】
f = open(file_path,'r',encoding='utf-8')
print(f.read())
#with語句
爲避免打開文件後忘記關閉,當with代碼塊執行完畢時,內部會自動關閉並釋放文件資源。with使用方法以下:
with open('file or file_path','r',encoding='utf-8') as file_object:
print(f.read())
with open('file or file_path','r',encoding='utf-8') as file_object1 , open('file or file_path','r',encoding='utf-8') as file_object2 #可打開多個
1 with open('111111.txt','rb') as f2: 2 for i in f2: 3 off = -3 4 while True: 5 f2.seek(off,2) 6 data = f2.readlines() 7 if len(data)>1: #當.readlines() len爲2時候,證實讀了兩行 8 print("last hang ",data[-1].decode("utf-8")) #取最後一個值,即最後一行 9 break 10 off *=3 #加大偏移量
2.文件的寫入:file.writelines(sequence)的參數是序列,好比列表,它會迭代幫你寫入文件。
#w模式,是在文件操做一開始的時候進行判斷是否新建和覆蓋寫入。若是是在文件操做過程當中,一直寫入也不會覆蓋
1 f = open("yesterday.txt",'w',encoding="utf-8") #文件的打開模式爲 ‘w’,此時文件能夠寫入,文件不存在則新建,若存在則清空再寫入,切記注意。 2 3 f.write("鶯歌燕舞太守醉,\n") 4 f.write("明朝酒醒春已歸。\n") 5 f.write('枕上詩書閒處好,\n') 6 f.write('門前風景雨來佳。') 7 8 f.close()
關於文件光標,默認在0,.read()後在最後
with open('111111.txt','r+') as f2: #txt 文件裏爲gkxxx,寫完後爲 2kxxx print(f2.tell()) #0 f2.write('2') print(f2.tell()) #1 f2.read() print(f2.tell()) #5
3.文件的方法:
1 f = open("yesterday.txt",'r',encoding="utf-8") 2 print(f.readline()) #打印第一行 3 print(f.tell()) #打印指針位置 4 print(f.seek(10)) #將指針位置放到第十個字符處,注意雖然能夠把指針放到指定處,可是在‘a’,‘r+’模式下,f.write()仍是會默認追加到文件末尾,不會在指針處追加 5 print(f.tell()) #打印指針位置
>>>>>>>>結果以下所示: 6 Somehow, it seems the love I knew was always the most destructive kind 7 8 72 9 10 10 10
with open('111111.txt','rb') as f2: #seek補充用法 print(f2.readlines()) print(f2.seek(-2,2)) >>> [b'2kxxx\r\n', b'dfdf'] #二進制中的換行 \r\n 9 #對於111111.txt中的內容,倒數2個字符,至關於正數9個字符 #seek有三種模式 0,1,2 0:默認用法 1:相對位置seek 2:倒數seek,當用1,2時候,模式要換成rb,
seek用 seek(int,2) 這種模式讀取文件最後一行
1 with open('111111.txt','rb') as f2: #讀取最後一行的思路 2 for i in f2: 3 off = -3 4 while True: 5 f2.seek(off,2) 6 data = f2.readlines() 7 if len(data)>1: 8 print("last hang ",data[-1].decode("utf-8")) 9 break 10 off *=3
#truncate方法
1 f = open("yesterday.txt",'a',encoding="utf-8") 2 f.truncate(10) #截取文件前十個字符,其他內容刪除
>>> somehow,i
#flush方法
1 import time,sys 2 for i in range(10): 3 sys.stdout.write("#") 4 sys.stdout.flush() 5 time.sleep(0.5) #每隔0.5秒打印一個「#」,一共打印十個
4.文件的修改
1 f = open('yesterday.txt','r',encoding='utf-8') 2 f2 = open('yesterday3.txt','w',encoding='utf-8') 3 4 for line in f: 5 if "肆意的快樂" in line: 6 line = line.replace("有那麼多肆意的快樂等我享受","有那麼多肆意的快樂等Gkx享受") 7 f2.write(line)
>>>>>
將yesterday.txt文件逐行讀取,修改其中一行,並write到新文件中
with open('upload_file','r') as f: line = f.readline() while line != '': print(line) line = f.readline()