對文件的操做分三步:python
一、打開文件獲取文件的句柄,句柄就理解爲這個文件linux
二、經過文件句柄操做文件windows
三、關閉文件。性能
文件基本操做:學習
f = open('file.txt','r') #以只讀方式打開一個文件,獲取文件句柄,若是是讀的話,r能夠不寫,默認就是隻讀, 在python2中還有file方法能夠打開文件,python3中file方法已經沒有了,只有open frist_line = f.readline()#獲取文件的第一行內容,返回的是一個list print(frist_line)#打印第一行 res = f.read()#獲取除了第一行剩下的全部文件內容 print(res) f.close()#關閉文件
打開文件時,須要指定文件路徑和以何等方式打開文件,打開後,便可獲取該文件句柄,後面經過此文件句柄對該文件操做,測試
打開文件的模式有:編碼
r,只讀模式(默認)。
w,只寫模式。【不可讀;不存在則建立;存在則刪除內容;】
a,追加模式。【不可讀; 不存在則建立;存在則只追加內容;】
"+" 表示能夠同時讀寫某個文件spa
r+,【可讀、可寫;可追加,若是打開的文件不存在的話,會報錯】 w+,【寫讀模式,使用w+的話,已經存在的文件內容會被清空,能夠讀到已經寫的文件內容】 a+,【追加讀寫模式,不存在則建立;存在則只追加內容;】
"U"表示在讀取時,能夠將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)指針
rU
r+U
"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)code
rb
wb
ab
文件操做方法:
f = open('file.txt','r+',encoding='utf-8')#encoding參數能夠指定文件的編碼 f.readline()#讀一行 f.readable()#判斷文件是否可讀 fr.writable()#判斷文件是否可寫 fr.encoding#打印文件的編碼 f.read()#讀取全部內容,大文件時不要用,由於會把文件內容都讀到內存中,內存不夠的話,會把內存撐爆,指針後面的內容 f.readlines()#讀取全部文件內容,返回一個list,元素是每行的數據,大文件時不要用,由於會把文件內容都讀到內存中,內存不夠的話,會把內存撐爆 f.tell()#獲取當前文件的指針指向 f.seek(0)#把當前文件指針指向哪 f.write('愛情證書')#寫入內容 f.fulsh()#寫入文件後,當即從內存中把數據寫到磁盤中 f.truncate()#清空文件內容 f.writelines(['愛情證書','孫燕姿'])#將一個列表寫入文件中 f.close()關閉文件
大文件時,讀取文件高效的操做方法:
用上面的read()和readlines()方法操做文件的話,會先把文件全部內容讀到內存中,這樣的話,內存數據一多,很是卡,高效的操做,就是讀一行操做一行,讀過的內容就從內存中釋放了
f = open('file.txt') for line in f: print(line) 這樣的話,line就是每行文件的內容,讀完一行的話,就會釋放一行的內存
with使用:
在操做文件的時候,常常忘了關閉文件,這樣的就可使用with,它會在使用完這個文件句柄以後,自動關閉該文件,使用方式以下:
with open('file.txt','r') as f:#打開一個文件,把這個文件的句柄付給f for line in f: print(line) with open('file.txt') as fr,with open('file_bak','w') as fw: #這個是多文件的操做,打開兩個文件,fr是讀file.txt,fw是新建一個file_bak文件 for line in fr:#循環file.txt中的每一行 fw.write(line)#寫到file_bak文件中
修改文件:
修改文件的話,有兩種方式,一種是把文件的所有內容都讀到內存中,而後把原有的文件內容清空,從新寫新的內容;第二種是把修改後的文件內容寫到一個新的文件中
第一種
with open('file.txt','r+') as fr: res = fr.read() new_res = res.replace('我','me') fr.write(new_res)
第二種
with open('file.txt') as fr,with open('file_new','w') as fw: #這個是多文件的操做,打開兩個文件,fr是讀file.txt,fw是新建一個file_bak文件 for line in fr:#循環file.txt中的每一行 new_line = line.replace('我','me') fw.write(new_line)#寫到file_bak文件中
集合:
集合也是一種數據類型,一個相似列表東西,它的特色是無序的,不重複的,也就是說集合中是沒有重複的數據
集合的做用:
一、它能夠把一個列表中重複的數據去掉,而不須要你再寫判斷
二、能夠作關係測試,好比說有兩個班,一個性能測試班,一個是接口測試班的,想找出來既學習了性能又學習了接口測試的同窗,就能夠用集合
定義集合
list = [2,3,1,2,3,4] s_list = set(list)#這樣就定義了一個集合 set1 = set([1,3,4,5,6])#這種方式和上面的都是把list轉換成一個集合 set2={'hehe','hehe1','hehe3'}#這種方式是直接定義一個集合
集合操做
list1 = {1, 2, 3, 4, 5, 6, 9} list2 = {2, 3, 4, 6, 1} list3 = {1, 2, 3} print(list1.intersection(list2)) # 取交集,也就是取list1和list2中都有的 print(list1 & list2)# 取交集 print(list1.union(list2)) # 取並集,也就是把list1和list2合併了,而後去除重複的 print(list1 | list2)# 取並集 print(list1.difference(list2)) #取差集 在list中存在,在list2中沒有的 print(list1 - list2) print(list3.issubset(list1))#判斷list3是否是list1的子集 print(list1.issuperset(list3))#判斷list1是否是list3的父集 print(list1.isdisjoint(list3))#判斷list1和list3是否有交集 print(list1.symmetric_difference(list2))#對稱差集,輸出兩個列表中都沒有的值,也就是把兩個集合中相同的去掉 print(list1 ^ list2) list1.add(888)#添加元素 list1.update([777,666,666]) list1.remove(777)#刪除元素,若是元素不存在會報錯 list1.pop()#刪除一個隨機的元素,並返回刪除的元素 list1.discard('dddd')#若是刪除的元素存在,刪除,不存在不作處理