一、字符串 |
?
?
特性:字符串本身不可修改,除非字符串變量重新賦值。Python3中所有字符串都是Unicode字符串,支持中文。
>>> name ?= "Jonathan" >>> name = "Jonathan" + "Ni" >>>print(name) Jonathan Ni ?# name 被重新賦值,并不是改變原先字符串 "Joanthan" |
?
?
?
?
?
字符串運算符
實例 a = "Hello"; b = "Python"
操作符 | 描述 | 實例 |
+ | 字符串連接 | a + b輸出結果 HelloPython |
[] | 通過索引獲取字符串中字符 | a[1]輸出結果 e |
[:] | 截取字符串中一部分 | a[0:2]輸出結果 He |
in | 成員運算符 - 如果字符串中包含給定的字符返回 True | H in a 輸出結果 True |
not in | 成員運算符 - 如果字符串中不包含給定的字符返回 True | N not a 輸出結果 True |
%? | 格式化字符串 | “%s World!"%a 輸出結果 Hello World! |
?
?
?
?
?
?
?
?
?
?字符常用方法
print("jonathan".capitalize()) # 首字母大寫,其余小寫 print("JonaThan".casefold()) # 轉為小寫字符,lower() 只是ASCII編碼大寫轉小寫 print("Jonathan".center(20, "*")) # 居中,兩側填充指定字符到指定寬度 print("Jonathan".count("an")) # 統計指定字符出現次數 print("Jonathan".endswith("a")) # 判斷是否以指定字符結尾 print("Joanthan".startswith("Jo")) # 判斷是否以指定字符開始 print("Jonathan".replace("J", "j")) # 替換指定字符 msg = "My name is {name},and {age} years old.".format(name="Jonathan", age=28) # 格式化 print(msg) |
?
?
?
?
?
?
?
?
?
?
二、列表 |
?
?
列表是我們最以后最常用的數據類型之一,通過列表可以對數據實現最方便的存儲、修改等操作。
更改本身與字符串對比分析
定義列表
names?
=
?[
]
通過下標訪問列表中的元素,下標從0開始計數
names[0] =?"Jonathan"???# 修改元素 names.append("Jim") ? >>> ? ???["Jonathan",?"Alex",?"Tom",?"Catherine",?"Jim"] ? ?# 在列表最后附件元素 names.insert(2,?"Linda") ?>>>??["Jonathan",?"Alex",?"Linda",??"Tom",?"Catherine",?"Jim"] ? ??# 在下標為2的地方插入元素,其他元素后移動 names.remove("Linda") ? >>>??["Jonathan",?"Alex",?"Tom",?"Catherine",?"Jim"] ??# 刪除第一個檢索到的元素 del names[4] ? ?>>> ??["Jonathan",?"Alex",?"Tom",?"Catherine"] ??# 按下標刪除元素 names.index("Alex") ? >>> ?1 ??# 返回下標 names.sort() ? ?>>>?["Alex",?"Catherine",?"Jonathan",?"Tom"] ? ??# ?按照ASCII正序排列 names.reverse() ? >>>? ?["Tom",?"Jonathan",?"Catherine",?"Alex"] ?# 元素反轉 names.count("Tom") ? >>> ?1 ?# 返回出現次數 |
?
?
?
?
?
?
?
?
?
?
三、元組 |
?
元組其實跟列表差不多,也是存一組數,只不是它一旦創建,便不能再修改,所以又叫只讀列表
names = ()
它只有2個方法,一個是count,一個是index
?
四、字典 |
?
?
字典一種key - value 的數據類型,使用就像我們上學用的字典,通過筆劃、字母來查對應頁的詳細內容。
構成:字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
d = { key1 : value1, key2 : value2 } |
?
?
特性:
1) 鍵必須是唯一的,但值則不必
2) 值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組
3) 字典是無序的?
4)字典是另一種可變容器模型,且可存儲任意類型對象
5) 字典內部構成 Hash算法,查詢效率高
使用字典:
import copy # 定義字典 names = { "stu1101": "001", "stu1102": "002", "stu1103": "003" }? # 查找 print(names) ?# 字典無序,每次輸出結果順序不同 print(names["stu1101"]) ? #?把相應的鍵放入方括弧 print(names["stu1104"]) ? # 不存在該鍵名時,返回KeyError: 'stu1104' print(names.get("stu1104","000")) #?不存在該鍵名時,返回默認值 '000' # 修改,定位鍵名則修改,無該鍵值則添加該鍵值對 names["stu1101"] = { "name": "Jack", "age": 20, "address": "Beijing China" } print(names["stu1101"]["name"]? # 刪除 pop() ?del print(names.pop(names["1103"]) ?# 刪除鍵名為"1103"的鍵值對元素,并返回該值 "003" del names["stu1102"] ? # 復制 credit_card1 = { "name": "Jonathan" "card": { "id": "1101", "balance": 800 } } credit_card2 = credit_card1 ?# 前復制 credit_card3 = copy.deepcopy(credit_card2) #深復制 ? credit_card2["name"] = "Rose" ? ? # credit_card2的"name"更新為"Rose",credit_card1的"name"保持不變 credit_card3["name"] = "Linda" ??# credit_card2的"name"更新為"Linda",credit_card1的"name"保持不變 credit_card1["card"]["balance"] -= 100 ? #?credit_card1的"balance" 與?credit_card2的"balance" 同步變化 credit_card2["card"]["balance"] -= 200 ??#?credit_card2的"balance" 與?credit_card1的"balance" 同步變化 credit_card3["card"]["balance"] -= 500 ???#?credit_card3的"balance" 與?credit_card1的"balance" 是兩份不同的變量空間 |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
五、文件操作 |
?
?
1、IO簡介
IO - Input/Output,也就是輸入和輸出。程序和運行時數據都是在內存中駐留,由CPU來執行,通常需要與磁盤、網絡等進行數據交換,就
需要IO接口。
IO編程中,Stream(流)是一個很重要的概念,可以把流想象成一個水管,數據就是水管里的水,但是只能單向流動。
Input Stream就是數據從外面(磁盤、網絡)流進內存,Output Stream就是數據從內存流到外面去。對于瀏覽網頁來說,
瀏覽器和服務器之間至少需要建立兩根水管,才可以既能發數據,又能收數據。
由于CPU和內存的速度遠遠高于外設的速度,所以,在IO編程中,就存在速度嚴重不匹配的問題。比如要把100M的數據寫入磁盤,
CPU輸出100M的數據只需要0.01秒,可是磁盤要接收這100M數據可能需要10秒,有兩種辦法可以解決:
-
第一種是CPU等著,程序暫停執行后續代碼,等100M的數據在10秒后寫入磁盤,再接著往下執行,這種模式稱為同步IO;
-
另一種是CPU不等待,只是告訴磁盤寫入,后續代碼可以立刻接著執行,這種模式稱為異步IO
總結:
使用異步IO來編寫程序性能會遠遠高于同步IO,但是異步IO的缺點是編程模型復雜。
操作IO的能力都是由操作系統提供的,每一種編程語言都會把操作系統提供的低級C接口封裝起來方便使用,Python也是。
?
2、文件操作
在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤,
所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),
- 通過操作系統提供的接口從這個文件對象中讀取數據(讀文件)
- 把數據寫入這個文件對象(寫文件)
對文件操作流程
1) 打開文件,得到文件句柄并賦值給一個變量
2) 通過句柄對文件進行操作
3) 關閉文件
f = open("lyrics", encoding="utf-8", mode="r") ? ? # 打開文件 first_line = f.readline() ?# 讀一行 print("first line:",first_line) # 打印該行 print("我是分割線".center(50,"*")) ?# 讀取剩下的所有內容,文件大時不要用 data = f.read() ?# 打印文件 print(data) f.close() # 關閉文件 |
?
?
?
?
?
?
?
?
打開文件的模式有:
r, 只讀模式 (默認)
w,只寫模式 (不可讀;不存在則創建;存在則刪除內容)
a,追加模式 (可讀; 不存在則創建;存在則只追加內容)
"+" 表示可以同時讀寫某個文件
r+,可讀寫文件。(可讀;可寫;可追加)
w+,寫讀
a+,同a
"b"表示處理二進制文件 (如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標注)
rb、wb、ab