1. 程式人生 > >Python自動化開發學習2-2

Python自動化開發學習2-2

python

集合

創建集合可以用set(),或者直接用{}

set_a = set([1,2,3,4,5])
set_b = {1,3,5,7,9}
print(set_a)
print(set_b)
print(type(set_a),type(set_b))

集合同樣也有各種操作,就記幾個符號的。別的到用的時候再去查吧

set_a = set([1,2,3,4,5])
set_b = {1,3,5,7,9}
print(set_a | set_b)  # 並集
print(set_a & set_b)  # 交集
print(set_a ^ set_b)  # 對稱差集
print(set_a - set_b)  # 差集
print(set_b - set_a)  # 還是差集

並沒有"+"號,並集已經有"|"號可以獲得了。

集合刪除的3中方法:

set_a = set([1,2,3,4,5])
set_b = {1,3,5,7,9}
c = set_a.pop()  # 隨機刪除一個,返回值為刪除的元素
print(c,set_a)
set_b.remove(3)  # 指定刪除一個元素
print(set_b)
set_b.discard(7)  # 也是指定刪除一個元素
print(set_b)
set_b.discard(2)  # discard允許嘗試刪除不存在的元素,但是remove會報錯
#setb.discard(2)
print(set_b)

文件的操作

open()打開文件。windows系統默認的是gbk編碼,如果不指定字符編碼,就會使用系統默認的字符編碼打開文件。比如這時python就會使用gbk編碼去讀utf-8文件,運行後會報錯或者讀到亂碼。

現在推薦我們的方法是全部文件都使用utf-8的編碼格式。open的時候就不要省略這個參數了,直接指定utf-8的字符編碼。

文件的基本操作:

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打開文件,這裏指定了utf-8
data = file.read()  # 讀取文件的全部內容
print(data)  # 打印讀取的內容
file.close()  # 關閉文件

讀取文件內容逐行打印:

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打開文件,這裏指定了utf-8
for line in file:
    print(line.rstrip())  # 加了rstrip可以去掉每一行右邊的空格(包括換行符)
file.close()

推薦上面的方法實現。這個方法是一次讀一行,讓後操作,然後再處理下一行。這是一個高效的方法

如果是使用一次讀取整個文件到內存,然後再進行處理的實現方法(比如readlines()),在處理大文件的時候效率會低很多。雖然那也得文件足夠大(大到現在內存容量的級別幾個G)。

不過這個方法處理的時候數據就不是列表了,要獲取行號,只能在for循環開始的時候加一個計數器,然後每一次都自增1,這樣來記錄行號

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打開文件,這裏指定了utf-8
count = 0
for line in file:
    count += 1
    print(count,line.rstrip())  # 加了rstrip可以去掉每一行右邊的空格(包括換行符)
file.close()

flush():強制刷新。默認寫文件的時候,是先寫入緩存,等緩存到一定數量後再一次全部寫入硬盤。如果對數據的實時性要求高的話,又不想關閉文件的話,就需要這個方法來手動強制執行一次寫如到硬盤的操作。

file = open(‘test.txt‘,‘a‘,encoding=‘utf-8‘)  # 打開文件,追加模式
file.write("先回將我存入緩存\n")
input("去打開文件看看文件有沒有更新")
file.flush()
print("現在再打開文件看看有沒有更新")
input("文件關閉前也會寫入,我沒再試一次")
file.write("再來一次,先回將我存入緩存\n")
input("打開文件看看文件有沒有更新")
print("現在再打開文件看看有沒有更新")
file.close()

驗證了硬盤中的文件不是實時更新的。但是在flush()或者是close()之後,再去確認文件的時候都是最新的內容了。

文件的修改

文件的修改比較麻煩,沒有辦法做直接的修改。想要實現,只能重新全部寫一遍。

方法一:一次讀取文件的全部內容,然後修改後,再寫回去。不適合大文件

file = open(‘test.txt‘,encoding=‘utf-8‘)
lines = file.readlines()  # 讀取源文件
file.close()
file_w = open(‘test2.txt‘,‘w‘,encoding=‘utf-8‘)  # 重新打開一個文件,這裏方便比較,使用了新的文件名
#file_w = open(‘test.txt‘,‘w‘,encoding=‘utf-8‘)  # 使用原來的文件名直接打開寫入就實現了文件的修改
for count,line_w in enumerate(lines):
    if count+1 == 3:
        line_w = "這是被替換的第三行\n"  # 這裏修改替換掉第三行的內容,別忘了\n換行
    file_w.write(line_w)  # 將內容朱行寫入到新文件
file_w.close()

方法二:也可以采取讀一行,寫一行的方式。避免一次讀取過多的內容,更適合使用在大文件的場景。推薦:

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打開源文件
file_w = open(‘test2.txt‘,‘w‘,encoding=‘utf-8‘)  # 新建一個臨時的新文件
count = 0  # 這種情況只能用計數器來計算行數了
for line in file:
    count += 1
    if count == 3:
        line = ‘這是被替換的第三行\n‘  # 這裏修改替換掉第三行的內容,別忘了\n換行
    file_w.write(line)  # 將內容朱行寫入到新文件
file.close()
file_w.close()

並沒有完成文件的修改,到此只是將源文件修改後生成了一個新文件。還需要將源文件刪除,然後將新文件改名。對文件的操作(非文件內容),還需要調用os模塊,不過並不難。而且也不是這節課的重點,就略過了。

文件關閉的問題

文件用完後,可以用close()將文件關閉,釋放文件句柄。如果不關,問題也不大(不過肯定不是好習慣)。另外,程序運行完之後,所有打開的文件都會被關閉。

總之,打開文件,如果不操作了,就應該關閉它。

使用with來了打開文件,可以自動關閉文件(通過縮進,在代碼塊執行完畢後,自動關閉文件)。所以條件允許的情況下,盡量用with來打開文件。將上面2段用with來改寫一下

# 註意一下縮進,通過這個判斷文件是否操作完畢,從而自動關閉
with open(‘test.txt‘,encoding=‘utf-8‘) as file:
    lines = file.readlines()  # 讀取源文件
with open(‘test.txt‘,‘w‘,encoding=‘utf-8‘) as file_w:
    for count,line_w in enumerate(lines):
        if count+1 == 3:
            line_w = "這是被替換的第三行\n"  # 這裏修改替換掉第三行的內容,別忘了\n換行
        file_w.write(line_w)  # 將內容朱行寫入到新文件
# 可以同時對多個文件的上下文進行管理
# 另外,一行代碼不建議超過80個字符,這裏超了,所以用了\來分行
# 並且換行後可以對齊open,清晰的顯示了打開的文件數量
with open(‘test.txt‘,encoding=‘utf-8‘) as file,     open(‘test2.txt‘,‘w‘,encoding=‘utf-8‘) as file_w:
    count = 0  # 這種情況只能用計數器來計算行數了
    for line in file:
        count += 1
        if count == 3:
            line = ‘這是被替換的第三行\n‘  # 這裏修改替換掉第三行的內容,別忘了\n換行
        file_w.write(line)  # 將內容朱行寫入到新文件

作業

購物車程序:

1、啟動程序後,輸入用戶名密碼後,如果是第一次登錄,讓用戶輸入工資,然後打印商品列表

2、允許用戶根據商品編號購買商品

3、用戶選擇商品後,檢測余額是否夠,夠就直接扣款,不夠就提醒

4、可隨時退出,退出時,打印已購買商品和余額

5、在用戶使用過程中, 關鍵輸出,如余額,商品已加入購物車等消息,需高亮顯示

6、用戶下一次登錄後,輸入用戶名密碼,直接回到上次的狀態,即上次消費的余額什麽的還是那些,再次登錄可繼續購買

7、允許查詢之前的消費記錄

上面是買家的模塊,另外再做一個賣家的模塊。賬號登錄後可以維護商品列表,新增、修改商品和價格。




Python自動化開發學習2-2