python學習筆記(三):文件操作和集合
阿新 • • 發佈:2017-12-21
轉換 無序 mov python3 lose 大文件 寫入 接口測試 不存在
對文件的操作分三步:
1、打開文件獲取文件的句柄,句柄就理解為這個文件
2、通過文件句柄操作文件
3、關閉文件。
文件基本操作:
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,追加模式。【不可讀; 不存在則創建;存在則只追加內容;】
"+" 表示可以同時讀寫某個文件
r+,【可讀、可寫;可追加,如果打開的文件不存在的話,會報錯】 w+,【寫讀模式,使用w+的話,已經存在的文件內容會被清空,可以讀到已經寫的文件內容】 a+,【追加讀寫模式,不存在則創建;存在則只追加內容;】
"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)
rU
r+U
"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)
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文件中
集合:
集合也是一種數據類型,一個類似列表東西,它的特點是無序的,不重復的,也就是說集合中是沒有重復的數據
集合的作用:
1、它可以把一個列表中重復的數據去掉,而不需要你再寫判斷
2、可以做關系測試,比如說有兩個班,一個性能測試班,一個是接口測試班的,想找出來既學習了性能又學習了接口測試的同學,就可以用集合
定義集合
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‘)#如果刪除的元素存在,刪除,不存在不做處理
python學習筆記(三):文件操作和集合