1. 程式人生 > >Python基礎(集合用法、檔案操作、字元編碼轉換、函式)

Python基礎(集合用法、檔案操作、字元編碼轉換、函式)

集合(Set)及其函式

集合是一個無序的、無重複元素的序列。

 1 list = {1, 3, 6, 5, 7, 9, 11, 3, 7}  # 定義集合方式一
 2 list1 = set([1, 3, 6, 5, 7, 9, 11, 3, 7])  # 定義集合方式二
 3 list2 = set()  # 定義一個空集合
 4 
 5 print(list1, list)  # 列印後可看到,集合中的元素已自動去重
 6 print(3 in list)  # 判斷一個元素是否在集合中,返回bool值
 7 print(20 not in list1)  # 判斷一個元素是否不在集合中,返回bool值
8 list1.add(99) # 新增元素 9 list1.update([10, 20, 30, 2]) # 新增多項 10 list1.remove(3) # 刪除一個元素,若元素不存在則報錯 11 print(list1.discard(8)) # 刪除一個元素,若元素不存在則不做任何操作 12 print(len(list1)) # 計算集合中元素的個數 13 print(list1.pop()) # 從集合中隨機彈出一個元素 14 list.clear() # 清空集合

集合的運算

 1 list1 = set([1, 3, 6, 5, 7, 9, 11, 3, 7])
2 list2 = set([2, 4, 6, 8, 3, 5]) 3 print(list1, list2) 4 5 # 交集 6 print(list1.intersection(list2)) 7 print(list1 & list2) 8 # 並集 9 print(list1.union(list2)) 10 print(list1 | list2) 11 # 差集 12 print(list1.difference(list2)) 13 print(list1 - list2) 14 # 對稱差集 15 print(list1.symmetric_difference(list2))
16 print(list1 ^ list2) 17 18 # 是否為子集 是否為父集 19 list3 = set([9, 11]) 20 print(list3.issubset(list1)) 21 print(list1.issuperset(list3)) 22 23 # 若兩個集合的交集為空 返回true 24 list4 = set([20, 30]) 25 print(list1.isdisjoint(list4)) 26 print(list1.isdisjoint(list2))

檔案(File)操作

在開發中經常會有讀寫檔案的需求,相關的程式碼實現如下:

檔案的開啟模式

1 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode description
t 文字模式 (預設)。
x 寫模式,新建一個檔案,如果該檔案已存在則會報錯。
b 二進位制模式。
+ 開啟一個檔案進行更新(可讀可寫)。
U 通用換行模式(不推薦)。
r 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
rb 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。這是預設模式。一般用於非文字檔案如圖片等。
r+ 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
rb+ 以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。一般用於非文字檔案如圖片等。
w 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wb 以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。
w+ 開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wb+ 以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。
a 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
a+ 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+ 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

檔案的讀操縱、寫操作、追加操作、按行讀取檔案

 1 # read 直接讀檔案全文
 2 f = open('test', 'r', encoding='utf-8')  # 檔案控制代碼
 3 data = f.read()
 4 print(data)
 5 
 6 # write 向檔案中寫
 7 f = open('test1', 'w', encoding='utf-8')
 8 f.write('我愛北京天安門,\n天安門上太陽升')
 9 
10 # append 在檔案最後追加內容
11 f = open('test1', 'a', encoding='utf-8')
12 f.write('呀呼嘿')
13 
14 # loop 按行讀取檔案
15 # high bigger 將檔案作為迭代器 讀一行列印一行 記憶體中只快取一行
16 f = open('test', 'r', encoding='utf-8')
17 count = 0
18 for l in f:
19     if count == 9:
20         print('----------')
21         count += 1
22         continue
23     print(l.strip())
24     count += 1
25 
26 # low loop 將檔案內容全部讀取至記憶體,效率低
27 
28 f = open('Sonnet', 'r', encoding='utf-8')
29 for index, line in enumerate(f.readlines()):
30     if index == 9:
31         print('------------')
32         continue
33     print(line.strip())

 檔案的函式

 

 1 f = open('test', 'r', encoding='utf-8')  # 檔案控制代碼 讀模式開啟檔案
 2 print(f.tell())  # 獲取當前游標位置
 3 print(f.readline())
 4 print(f.readline())
 5 print(f.tell())
 6 print(f.readline())
 7 f.seek(10)  # 跳轉游標到第10個字元
 8 print(f.readline())
 9 print(f.encoding)  # 獲取檔案編碼
10 print(f.fileno())  # i don't know what it is
11 print(f.isatty())  # 判斷檔案是否是tty終端
12 print(f.readable())  # 判斷檔案是否是可讀
13 print(f.writable())  # 判斷檔案是否是可寫
14 print(f.seekable())  # 判斷檔案是否是可跳轉游標 (tty不可跳轉
15 f.flush()  # 當用寫模式開啟檔案時 並不是寫一句系統就會呼叫一次io 若需要及時重新整理硬碟中的檔案內容 可以呼叫該函式
16 f.close()  # 關閉檔案
17 print(f.closed)  # 判斷檔案是否關閉

 

 

 

檔案的修改***

 1 # 檔案的修改 直接修改檔案本身比較困難 可以將修改寫入另一個檔案中 如有需求可以再寫回檔案本身
 2 f = open('test', 'r', encoding='utf-8')
 3 f_new = open('test.bak', 'w', encoding='utf-8')
 4 
 5 for line in f:
 6     if '我曾千萬次夢見' in line:
 7         line = line.replace('我曾千萬次夢見', '我不想千萬次夢見')
 8     f_new.writelines(line)
 9 
10 f.close()
11 f_new.close()

 

一個進度條例項 用於理解flush函式的機制 該例項可以實現進度條效果

1 import sys
2 import time
3 
4 f = open('Sonnet1', 'w', encoding='utf-8')  # 檔案控制代碼 寫模式開啟檔案 會新建一個檔案 若同名檔案存在 則直接覆蓋
5 for i in range(10):
6     sys.stdout.write('#')
7     sys.stdout.flush()
8     time.sleep(0.2)