python學習筆記(三):文件操做和集合

對文件的操做分三步: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')#若是刪除的元素存在,刪除,不存在不作處理
相關文章
相關標籤/搜索