Python—集合的操做、文件的操做

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}

 

2.文件的操做


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
View Code

 

  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()
判斷文件讀取結束
相關文章
相關標籤/搜索