1. 程式人生 > >python學習筆記(三):文件操作和集合

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

轉換 無序 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學習筆記(三):文件操作和集合