Python集合&文件操做Day03

集合

主要做用: python

  1. 去重
  2. 關係測試, 交集\差集\並集\反向(對稱)差集

集合也是一種數據類型,一個相似列表東西,它的特色是無序的,不重複的,也就是說集合中是沒有重複的數據linux

#集合定義
list_1 = [1,2,3,4,5,3,6,]
list_dict = {1,2,3,4,5,6,7,6,8}
#集合操做
list_1 = set(list_1) #建立一個惟一的字符集---去重
print(set(list_dict)) #建立一個惟一的字符集---去重
print(list_1,type(list_1))
list_2 = set([2,6,0,66,22,8,4])
print(list_1.intersection(list_2)) #交集 -取出重複的數字
print(list_1.union(list_2)) #並集 去重-統一顯示 {0, 1, 2, 3, 4, 5, 6, 66, 8, 22}
print(list_1.difference(list_2)) #差集  取出list_1有,list_2沒有的
list_3 = set([1,3,6])
print(list_3.issubset(list_1)) #子集  list_3的值在list_1全有
print(list_1.issuperset(list_3))#父集
print(list_1.symmetric_difference(list_2))#對稱差集-list_1,list_2互相沒有的取出來
list_4 = set([7,8,9,3])
print(list_3.isdisjoint(list_4)) #返回True,若是兩個參數有一個零交叉點
print("-------------")
print(list_1 & list_2) #交集
print(list_1 | list_2) #並集
print(list_1 - list_2) #差集 list_1不帶list_2
print(list_1 ^ list_2) #對稱差集

#集合操做
print("-----集合操做--------")
list_1.add(999) #添加
print(list_1)
list_1.update([777,888]) #添加多項f
print(list_1)
list_1.remove(999) #刪除  
print(list_1)
list_1.pop() #隨機刪除
print(list_1)
list_1.discard(888) #刪除  
print(list_1)

 

文件操做

open函數,該函數用於文件處理windows

操做文件時,通常須要經歷以下步驟:ide

  • 打開文件
  • 操做文件
  • 關閉文件

準備文件保存爲file.txt格式:函數

 1 北國風光,千里冰封,萬里雪飄。
 2 
 3 望長城內外,唯餘莽莽;大河上下,頓失滔滔。
 4 
 5 山舞銀蛇,原馳蠟象,欲與天公試比高。
 6 
 7 須晴日,看紅裝素裹,分外妖嬈。
 8 
 9 江山如此多嬌,引無數英雄競折腰。
10 
11 惜秦皇漢武,略輸文采;唐宗宋祖,稍遜風騷。
12 
13 一代天驕,成吉思汗,只識彎弓射大雕。
14 
15 俱往矣,數風流人物,還看今朝。
沁園春·雪

文件基本操做測試

1 f = open('file.txt', 'r')  #以只讀方式打開一個文件,獲取文件句柄,若是是讀的話,r能夠不寫,默認就是隻讀
2 frist_line = f.readline()  # 獲取文件的第一行內容,返回的是一個list
3 print(frist_line)  # 打印第一行
4 res = f.read()  # 獲取除了第一行剩下的全部文件內容
5 print(res)
6 f.close()  # 關閉文件

打開文件的模式有:
  • r,只讀模式(默認)。
  • w,只寫模式。【不可讀;不存在則建立;存在則刪除內容;】
  • a,追加模式。【可讀;   不存在則建立;存在則只追加內容;】
"+" 表示能夠同時讀寫某個文件
  • r+,可讀寫文件。【可讀;可寫;可追加】
  • w+,寫讀
  • a+,同a
"U"表示在讀取時,能夠將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)
  • rU
  • r+U
"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)
  • rb
  • wb
  • ab
 1 f = open("file.txt",'r+',encoding="utf-8") #文件句柄-文件的內存對象(文件名,字符集,大小。。)
 2 print(f.read())  #讀取整個文件
 3 print(f.readline()) #讀取一行
 4 print(f.readlines()) # 按行存成列表
 5 lens = len(open('file.txt','rU').readline())
 6 print(lens) #打印文件共有多少行
 7 for i in f.readlines()[2:lens]: # 指定文件行數讀取   #從第2行到結尾
 8     print(i)
 9 print(f.readline())
10 print(f.tell()) #計算字節數
11 f.seek(3) #返回光標
12 print(f.readline())
13 print(f.encoding)  #打印字符集
14 print(f.fileno()) #返回文件句柄在內存的編號 3
15 print(f.name) #打印文件名
16 print(f.seekable()) #判斷文件光標是否能移動 True
17 print(f.readable()) #判斷文件是否可讀  True
18 print(f.writable()) #判斷文件是否可寫 False
19 f.flush()   #刷新
20 f.truncate(10) #文件清空   不傳入值清空文件,傳值從頭開始截斷
文件操做函數
1 #刷洗方法使用 進度條
2 import sys,time
3 for i in range(50):
4     sys.stdout.write('#')
5     sys.stdout.flush()  #刷新  進度條
6     time.sleep(0.1)

文件循環操做編碼

1 f = open("file.txt", 'r', encoding="utf-8")
2 f_new = open('file.bak', 'w', encoding='utf-8')
3 for line in f:
4     if '江山如此多嬌,引無數英雄競折腰' in line:
5         line = line.replace('江山如此多嬌,引無數英雄競折腰', '春色滿園關不住,一枝紅杏出牆來.')  # if username == line .strip():
6     f_new.write(line)
7 f.close()
8 f_new.close()
文件循環

with使用:spa

  • 在操做文件的時候,常常忘了關閉文件,這樣的就可使用with,它會在使用完這個文件句柄以後,自動關閉該文件,使用方式以下:
 1 # 同時打開多個文件格式:
 2 # with open('file.txt', 'r', encoding='utf-8') as f, open('file.bak', 'r', encoding='utf-8') as j:
 3 
 4 with open('file.txt', 'r', encoding='utf-8') as f:  # 自動關閉文件
 5     for line in f:
 6         print(line)
 7 # 同時打開多個文件建議寫成
 8 with open('file.txt', 'r', encoding='utf-8') as f, \
 9         open('file.bak', 'w', encoding='utf-8') as j:
10     for line in f:
11         if '江山如此多嬌,引無數英雄競折腰' in line:
12             line = line.replace('江山如此多嬌,引無數英雄競折腰', '春色滿園關不住,一枝紅杏出牆來.')  # if username == line .strip():
13         j.write(line)
with使用

 

資料補充

ASCII 默認8位 只能存英文&特殊字符,不能存儲中文,unicode 萬國碼  默認2個字節,unicode被稱爲萬國碼,每一個國家都的語法他都含有,utf-8是萬國碼的擴展集
utf-8 可變長的字符集,全部英文字符依然按ascii存儲,全部中文字符統一3個字節。
 
python2  —python 直接轉
字符編碼的轉換都是有規律的一個gbk的編碼想轉換成utf-8須要先轉爲unicode做爲中間者,而後在轉爲utf-8
固然在轉換時也要注意 解碼decode成unicode 編碼encode成你須要的字符集
同時、在decode和是須要告訴unicode你是什麼字符來解碼成unicode以下面代碼
 
 1 import sys
 2 print(sys.getdefaultencoding())  # 獲取當前系統字符集
 3 msg = "我愛北京天安門"
 4 # 這裏能夠看到咱們解碼(decode)成unicode,告訴他咱們是utf-8轉成unicode,緊接着咱們又編碼(encode) 這時咱們須要告訴計算機,咱們要編碼的字符集 這裏咱們要編碼成gb2312的格式
 5 msg_gb2312 = msg.encode("gb2312").decode('gb2312')
 6 # msg_gb2312 = msg.encode("gb2312")
 7 print(msg_gb2312)
 8 # print(msg_gb2312.decode('gb2312'))
 9 # ok 之後的字符集編碼轉換也就相通了,只要記住要們是以unicode來完成中間轉換的就好
10 #gb2312_to_gbk = msg_gb2312.encode("gbk").decode("gbk")
11 gb2312_to_gbk = msg_gb2312.encode("gb2312").decode("gb2312")
12 print(gb2312_to_gbk)
相關文章
相關標籤/搜索