python基礎(四)檔案操作和集合

2022-07-12 12:15:11 字數 4443 閱讀 9887

一.檔案操作

對檔案的操作分三步:

1、開啟檔案獲取檔案的控制代碼,控制代碼就理解為這個檔案

2、通過檔案控制代碼操作檔案

3、關閉檔案。

1.檔案基本操作:

2.檔案開啟模式:

r:唯讀,不加模式預設為r

w:只寫,[不可讀,不存在則建立,存在則刪除內容]

a:追加,[不可讀,不存在則建立,存在則只追加內容]

"+" 表示可以同時讀寫某個檔案

r+ :讀寫--可讀、可寫、可追加,如果開啟的檔案不存在的話,會報錯

w+ :寫讀--先建立檔案,再寫(在原檔案上的修改都是覆蓋操作)

a+ :追加讀--預設開啟控制代碼在末尾,讀取需先seek(0)指定位置,一寫控制代碼就到末尾了

#r和w,seek指定控制代碼可以覆蓋修改,a+指定控制代碼也是追加

"u"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

rur+u

# windows上換行符為 \r\n

"b"表示處理二進位制檔案

rb:二進位制檔案讀

wb:二進位制檔案寫

ab:追加二進位制

# 檔案存在硬碟上都是二進位制,前邊說encoding='utf-8'是指把二進位制轉換成utf-8編碼開啟,

# 而「b」是指,不用轉換編碼,我直接讀取二進位制

3.檔案操作:

f = open("1.txt", 'r', encoding="utf-8")# encoding="utf-8",utf-8編碼開啟檔案,windows下預設gbk開啟

f.readline() # 讀一行,字串

f.readable() # 判斷檔案是否可讀

f.writable() # 判斷檔案是否可寫

f.encoding() # 列印檔案的編碼

f.read() # 讀取檔案控制代碼到結束所有內容,大檔案時不要用,因為會把檔案內容都讀到記憶體中

f.readlines() # 讀取檔案所有內容,返回乙個list,元素是每行的資料,大檔案時不要用

f.write("天安門") # 寫入內容,r和w模式,為控制代碼處覆蓋寫入,a模式寫到最後

f.writelines(['zhangsan'],['李四']) #將乙個列表寫入檔案中

f.flush() # 強制重新整理(預設緩衝區滿了存入磁碟)

f.close() # 檔案關閉

f.closed() # 判斷檔案是否關閉

f.read(5) # 讀取5個字元

f.tell() # 檢視檔案控制代碼位置。按照字元計數

f.seek(0) # 移動檔案控制代碼到第0個字元位置

f.encoding # 檔案編碼

f.truncate() # 什麼不寫清空檔案

f.truncate(10) # r模式截斷出前10個字元,其他模式還是清空

大檔案時,讀取檔案高效的操作方法:

用上面的read()和readlines()方法操作檔案的話,會先把檔案所有內容讀到記憶體中,這樣的話,記憶體資料一多,非常卡,高效的操作,就是讀一行操作一行,讀過的內容就從記憶體中釋放了

f = open('file.txt')

for line in f: # f 變成了迭代器

print(line) # 判斷行的話,需自己加個計數器

4.檔案內容修改

前面說的檔案修改,只是對原內容覆蓋,並不會插入內容,原內容往後移,因為這樣有可能就把其他檔案覆蓋了,檔案發生損壞。so: 

檔案修改兩個辦法: 

1. 載入到記憶體,記憶體修改,覆蓋寫回 

2. 另開啟乙個檔案,修改完寫到新檔案中

with open("test", 'r+', encoding='utf-8') as fr

res = fr.read()

new_res = res.replace('我','me')

fr.write(new_res)

with open("test", 'r', encoding='utf-8') as f, \

open("test.tmp", 'w', encoding='utf-8') as f_new:

for line in f:

if "聚焦頭條" in line:

line = line.replace("聚焦頭條","fgf")

f_new.write(line)

# os.path.exists("test.bak") 判斷檔案是否存在

# os.remove("test.bak") 刪除檔案

# os.rename(test.tmp, test) 重新命名

5.檔案關閉(with語句)

為了避免開啟檔案後忘記關閉,可以通過管理上下文,即:

with open('log') as f:

pass

如此方式,當with**塊執行完畢時,內部會自動關閉並釋放檔案資源。 

在python 2.7 後,with又支援同時對多個檔案的上下文進行管理

二.集合

集合也是一種資料型別,乙個類似列表的東西,特點是乙個無序的,不重複的資料組合,它的主要作用如下:

1、常用操作

去重

list_1 = [1,1,2,3,4,5,6,6,7,7,8,8,9,9,3]

set_1 = set(list_1)

>>> set_1

# 集合用{}表示

交集 set_2 =

set_1.intersection(set_2)

set_1&set_2

並集: set_1.union(set_2)

set_1 | set_2

差集: set_1.difference(set_2)

set_1 - set_2

# in set_1 but not in set_2

子集: set_1.issubset(set_2) #判斷set_1是不是set_2的子集

父集: set_1.issuperset(set_2) #判斷

set_1是不是set_2的父集

對稱差集:(並集去除交集,即並集和交集的差集) 輸出2個列表都沒有的值

set_1.symmetric_difference(set_2) 即(set_1 | set_2) - (set_1 & set_2)

set_1 ^ set_2

判斷有沒有交集,無交集,返回true

set_1.isdisjoint(set_2)

2、符號操作

& : 交集        intersection

| :並集 union

-:差集 difference

s <= t :子集 issubset

s >= t :父集 issuperset

^ :對稱差集 symmetric_difference

3、集合增刪改查

新增:

set_1.add(99)

批量新增

set_1.update([1,2,3,4])

刪除: set_1.remove('h') # 沒有則報錯

set_1.discard(99) # 在則刪除,不在就不操作。無返回資訊

隨機刪:

set_1.pop()

長度: len(set_1)

是否屬於判斷

s in set_1 # (判斷成員在不在都是這麼寫,字典中判斷key)

返回 set 「s」的乙個淺複製

s.copy()

Python基礎10 檔案操作和IO操作

檔案 可以作為資料的儲存 儲存爬取的資料 資料庫 redis mysql 檔案和資料庫都是資料持久化 my list print my list 正常執行的專案都是在記憶體當中 儲存資料的內容需要存在硬碟裡面 檔案是以硬碟為載體的 檔案的訪問模式 r模式 唯讀 檔案不存在會崩潰 w模式 只寫 a模式...

python學習筆記(四)檔案操作和集合

python學習筆記 四 檔案操作和集合 檔案基本操作 現有檔案file.txt 1 f open file.txt r 以唯讀方式開啟乙個檔案,獲取檔案的控制代碼,如果是讀的話,r可以不寫,預設就是唯讀 檔案不存在時,會報錯 2 first line f.readline 獲取檔案的第一行內容,返...

Python基礎(18)檔案操作

在計算機中,檔案是以 二進位制 的方式儲存在磁碟上的 文字檔案和二進位制檔案 1.文字檔案 2.二進位制檔案 在計算機中要操作檔案的套路非常固定,一共包含三個步驟 開啟檔案2.讀 寫檔案 讀 將檔案內容讀入記憶體 read 寫 將記憶體內容寫入檔案 write 關閉檔案 序號函式 方法 說明01 o...