1. 程式人生 > 其它 >Python學習筆記(2)

Python學習筆記(2)

本章:

  1.列表、元組操作

  2.字串操作

  3.字典操作

  4.集合操作

  5.檔案操作

  6.字元編碼與轉碼

一.列表、元組操作

列表是我們最常用的資料型別之一,通過列表可以對資料實現最方便的儲存、修改等操作。

定義列表:

1 name = ['1','2','3']  #定義列表
2 print(name)  列印列表

通過下標訪問列表中的元素:

1 name = ['1','2','3']
2 print(name[0])    #第一個位置是從0開始計數的
3 1
4 print(name[1])
5 2
6 print(name[2])
7 3
8 print(name[-2
])   #也可以寫倒著寫,用負數表示 9 2

追加: *.append() *:列表的名稱,以下*代表相同意思

1 name = ['1','2','3']
2 name.append( ("new1","new2") ) #可以追加一組
3 name.append("new3")        #可以追加一個
4 print(name)
5 ['1', '2', '3', ('new1', 'new2'), 'new3']

插入: *.insert

1 name = ['1','3','5','7','9']
2 name.insert(4,"8")    #在第四個字串前插插入一行
3 print(name) 4 ['1', '3', '5', '7', '8', '9']

修改:

1 >>> name = ["A","B","C","D"]
2 >>> name[2]= "new c"        ##定義第2個字串賦予新的值
3 >>> print(name)
4 ['A', 'B', 'new c', 'D']

刪除:del、*.pop、*.remove

 1 >>> name = ["A","B","C","D"]
 2 >>> del name[2]      #刪除指定字串,這裡2代表字串所在標註的位置
3 >>> print(name) 4 ['A', 'B', 'D']
5 >>> name = ["A","B","C","D"] 6 >>> name.pop()      #刪除最後一個字串 7 >>> print(name) 8 ['A', 'B', 'C']
9 >>> name = ["A","B","C","D"] 10 >>> name.remove("A")  #刪除指定的字串;直接寫字串; 11 >>> print(name) 12 ['B', 'C', 'D']

擴充套件: *.extend

1 >>> name = ["A","B","C","D"]
2 >>> names = ["E","F","G"]
3 >>> name.extend(names)
4 print(name)

拷貝:

 1 >>> name = ["A","B","C","D"]
 2 >>> names = name.copy()
 3 >>> name[2] = "new c" 4 print(names)
 5 ['A', 'B', 'C', 'D']         #只拷貝一層,先拷貝,然後修改,拷貝出來的內容是修改之前的
 
 6 >>> import copy   #呼叫模組   #深層拷貝,拷貝後,如果對資料進行修改,拷貝出的內容是修改以後的
 7 >>> names = ["ZhangYang","GuYun","HanYunHui","2JinYang","JinYang",["1","2"] ]
 8 >>> name2 = copy.deepcopy(names)
 9 >>> names[0] = "jinyang"
10 >>> print(names)
11 ['jinyang', 'GuYun', 'HanYunHui', '2JinYang', 'JinYang', ['1', '2']]

統計&獲取下標

1 >>> name = ["1","1","2","2","3"]
2 >>> print(name.count("1"))      ##統計列表中有多少"1"字串
3 2        
4 >>> name = ["1","1","2","2","3"]
5 >>> print(name.index("2"))      ##獲取"2"下標位置,如果有重複,只返回第一個所在下標的位置
6 2
7 >>> name = ["1","1","2","2","3"]
8 >>> print(name[name.index("3")])  ##可以巢狀查出內容;先獲取"3"字串下標位置,然後根據下標打印出相應的字串
9 3

排序&反轉 *.sort:排序  *.reverse:反轉

1 >>> name = ["name","3","1","Name","MEm","t1","#1"]
2 >>> name.sort()      ##排序
3 >>> print(name)
4 ['#1', '1', '3', 'MEm', 'Name', 'name', 't1']
5 >>> name.reverse()    #反轉
6 >>> print(name)
7 ['t1', 'name', 'Name', 'MEm', '3', '1', '#1']

切片:獲取多個元素

 1 name = ["0","1","2","3","4","5","6"]
 2 >1> print(name[3],name[1])      ##讀取下標3和下標1字串
 3 >2> print(name[1:5])            ##讀取下標1至下標5之間的字串,但不包括下標5對應的字串
 4 >3> print(name[1:-1])           ##讀取下標1到倒數第一行之間的字串,但不包括倒數第一行字串
 5 >4> print(name[0:3])            ##讀取下標0至下標3之間的字串,但不包括下標3
 6 >5> print(name[:3])             ##與上面一致,主要提出出前面那個0可以省略;後面0也可也省略,例如:1:0 可以寫成1:
 7 >6> print(name[0::3])           ##後面3代表每隔兩個元素,讀取一次
 8 
 9 >1> 3 1
10 >1> ['1', '2', '3', '4']
11 >1> ['1', '2', '3', '4', '5']
12 >1> ['0', '1', '2']
13 >1> ['0', '1', '2']
14 >1> ['0', '3', '6']

元組:元組和列表類似,元組使用小括號(),列表使用中括號[]

參考具體用法:https://www.runoob.com/python3/python3-tuple.html

二.字串操作

print('name'.capitalize())       
>>Name                   ##把第一個字串首字母變成大寫 print(
'NAME'.casefold())        
>>name                   ##把所有大寫變成小寫 print(
"han".center(10,"-"))
>>---han----               ##格式,寫10個字串不夠用-代替,同時han居中
print(
'A A A A A'.count('A'))
>>5                     ##統計有多少字串 print(
'A'.encode())
>>                 ##把字串變成byte字串 print(type(
'A'))
>><class 'str'>             ##列印字串型別 print(
'my name is hanyunhui'.endswith('hui'))  
>>true                         ##判斷字串以什麼結尾,正確返回true,錯誤返回false print(
'han\tyun'.expandtabs(10))     
>>han yun                 ##把\t 變成多個空格 print(
'hanyunhui'.find('h'))   
>>0                          ##查詢字串,返回的值是字串所在下標的位置;如果有重複返回第一個值所在位置
print('hanyunhui'.rfind('n')
>>5                          ##查詢字串,如果有重複返回最後一個字串所在位置; print(
'hanyunhui'['hanyunhui'.find('han'):5])

>>hanyu                        ##先查詢字串,先查詢字串換下標位置,下標到下標5之間的字串
print('223223'.replace('2','1',3))    
>>113123                    ##替換;把2替換成1,後面的3代表替換的次數
print('hanyunhui'.swapcase())
>>HANYUNHUI                     ##把小寫變成大寫
print('han yun hui'.title())          
>>Han Yun Hui                    ##把首字母變成大寫
print('hanyunhui'.split('n'))
>>['ha','yu','hui']                ##提取某個欄位當成分隔符
print('1+2+3+4'.split('+'))
>>['1','2','3','4']
print('1+2+3\n+4'.split('\n'))
>>['1+2+3','+4']                  ##把換行符當做分割符號
print('1+2+3\n+4'.splitines())
>>['1+2+3','+4']                 ##與上面作用一致

三.字典操作

字典是一種key-value的資料型別;key必須是唯一的,不能重複;value是無序的;

語法:

info = {
    '001':'zhangsan',
    '002':'lisi',
    '003':'wangwu'
}
'001','002','003':屬於key值,必須唯一,不能重複;
'zhangsan','lisi','wangwu':valuse值,無序的;

增加: 修改,如果key存在則是修改;如果不存在則是新增;

info ['004'] = 'zhaoliu'
print(info)
{'001': 'zhangsan', '002': 'lisi', '003': 'wangwu', '004': 'zhaoliu'}

刪除:

info = {'001':'zhangsan','002':'lisi','003':'wangwu'}
print(info.pop('001'))    ##標準刪除
print(info.popitem())     ##隨機刪除
del info['002']       ##通用刪除法

查詢:

info = {'001':'zhangsan','002':'lisi','003':'wangwu'}
print('004' in info)    ##標準查詢,如果存在返回true,如果不存在返回false
print(info.get('004'))   ##如果存在返回valse值,如果不存在返回none值
print(info['003'])        ##如果婦女在返回valse值,如果不存在則會提示報錯

多級巢狀:

 1 info = {
 2     "中國":{
 3         "北京":{'東城','西城'},
 4         "上海":{'陸家嘴','虹橋'},
 5     },
 6     "日本":{
 7         "東京":{'富士山','火山'},
 8         "櫻花":{'相撲','生魚片'}
 9     },
10     "韓國":{
11         "首爾":{'整容','泡菜'},
12         "濟州島":{'大海','清冊'}
13     }
14 }

其他用法:

info = {'001':'zhangsnan','002':'lisi','003':'wangwu'}
print(info.keys())
>>dict_keys(['001', '002', '003'])         ##列印key值
print(info.values()) >>dict_values(['zhangsan', 'lisi', 'wangwu'])  ##列印valuse值
print(info.setdefault("004":'ZhangSan'))     ##如果key值存在列印valuse值,如果key值不存在列印自己的valuse值 >>zhangsnan b = {1:2,3:4,'002':"LiSi"} info.update(b) print(info) >>{'001': 'zhangsnan', '002': 'LiSi', '003': 'wangwu', 1: 2, 3: 4}     ##更新 print(info.items()) >>dict_items([('001', 'zhangsnan'), ('002', 'LiSi'), ('003', 'wangwu'), (1, 2), (3, 4)])

迴圈dict

1 info = {'001':'zhangsnan','002':'lisi','003':'wangwu'}
2 
3 for key in info:
4     print(key,info[key])
5 
6 for k,v in info.items():
7     print(k,v)

四.集合操作

集合是一個無序,不重複的資料組合,主要作用:

  • 去重,把一個列表變成集合,就自動去重
  • 關係測試,測試兩組資料之間的交集、差集、並集等關係

常用操作:

A = set({1,2,3,4})
B = set({4,5,6,7})

#並集;去掉重讀部分結合起來
print(A | B)
print(A.union(B))
>>>{1,2,3,4,5,6,7}

#交集;只打印有交集的部分
print(A & B)
print(A.intersection(B))
>>>{4}

#差集;列印不同的部分,注意那個表在前面就列印那個表的內容
print(A - B , B - A)
print(A.difference(B),B.difference(A))
>>>{1,2,3}{5,6,7}

#對稱差集;打印出兩個表所不同部分
print(A ^ B)
print(A.symmetric_difference(B))
>>>{1,2,3,5,6,7}

#判斷兩個檔案是都有交集;沒有返回true,有返回false
print(A.isdisjoint(B))

#子集
A = set({1,2,3,4,5,6})
B = set({5,6})
print(A.issuperset(B))  #判斷子集;正確返回true,不是返回false
print(B.issubset(A))    #判斷父集;正確返回true,不是返回false
print('====================')

A.add(99)                #增加一項
A.update([1000,1001,1002])   #新增多項
A.pop()            #隨機刪除一項
A.remove(2)              #指定刪除一項;當刪除項不存在時提示報錯
A.discard(3)            #指定刪除一項;當刪除項不存在時無反應

#####################
A = set({1,2,3,4,'n'})
B = set({4,5,6,7})

print(len(A))        #測試A的長度
print('n' in A)         #測試n是都在A集合中;如果存在返回true值
print('5' not in A)               #測試5是都在A集合中;如果不存在返回true值

五.檔案操作

open() 函式常用形式是接收兩個引數:檔名(file)和模式(mode);open(file,mode='r')

詳細檢視菜鳥教程中file辦法:https://www.runoob.com/python/file-methods.html

對檔案操作流程:

  1. 開啟檔案,得到檔案控制代碼並賦值給一個變數
  2. 通過控制代碼對檔案進行操作
  3. 關閉檔案

現檔案如下:

 1 Sunday's coming I wanna drive my car
 2 這週日我想開著我的愛車
 3 To your apartment with the present like a star
 4 像明星一樣帶著的禮物去你的公寓
 5 Forecaster said the weathers may be rainy hard
 6 天氣預報說天氣糟透了
 7 But I know the sun will shine for us
 8 但是太陽會為我們閃耀
 9 Oh lazy seagull fly me from the dark
10 喔~慵懶的海鷗引領我走向光明
11 I dress my jeans and feed my monkey banana
12 穿上我的牛仔,給猴子餵了點香蕉
13 Then I think my age how old,skyline how far
14 我想到,我有多大,地平線有多遠
15 Or we need each other in California
16 喔~在加州我們需要彼此
17 You show me your body before night comes down
18 夜幕降臨前你向我展示你誘人的身姿
19 I touch your face and promise to stay ever young
20 我撫摸你的臉頰,許下永遠像年輕時愛你的諾言
21 On this ivory beach we kissed so long
22 我們深情擁吻在這象牙色的海灘
23 It seems that the passion's never gone
24 彷彿激情永不逝
25 You sing me your melody and I feel so please
26 你為我哼唱你的曲子,幸福感衝昏了我的腦袋
27 I want you to want me to keep your dream
28 我希望你也讓我永遠懷揣你的夢想
29 Together we'll run wild by a summer symphony
30 在夏夜的交響樂中我們狂野的奔跑
31 This is what we enjoyed not a fantasy
32 我們享受的不再是幻想
33 
34 The tin-man's surfing I wanna try my luck
35 我想去衝浪
36 To the top of tide rip like just have some ***
37 在浪尖舞動就像***一樣
38 I know you have no blame for my proud moonish heart
39 你不會責備我驕傲易變的心
40 Welcome to the golden beatnic park
41 歡迎來到黃金beatnic莊園
42 Oh diamond seashore drag me from the yard
43 鑽石般的海岸指引我園外風光
44 Incredible sunward I watch as you're in photograph
45 你為這動人的景色添姿加彩
46 For camera your smile's so sweet,palm trees' so lush
47 對著鏡頭,你笑的如此的甜,就像棕櫚樹青翠欲滴
48 Would you believe my honey it's California
49 親愛的,你會相信我嗎,這就是加州
50 You show me your body before night comes down
51 夜幕降臨前你向我展示你誘人的身姿
52 I touch your face and promise to stay ever young
53 我撫摸你的臉頰,許諾我們永遠這樣年輕
54 On this ivory beach we kissed so long
55 我們深情擁吻在這象牙色的海灘
56 It seems that the passion's never gone
57 彷彿激情永不逝
58 You sing me your melody and I feel so please
59 你為我哼唱你的曲子,幸福感衝昏了我的腦袋
60 I want you to want me to keep your dream
61 我希望你也讓我永遠懷揣你的夢想
62 Together we'll run wild by a summer symphony
63 在夏夜的交響樂中我們狂野的奔跑
64 This is what we enjoyed not a fantasy
65 我們享受的不再是幻想
View Code

基本操作:

f = open('gala.txt','r')      #open 是開啟檔案 
data = f.read()               #賦值變數
print(data)                   #列印內容     
f.close()                     #關閉檔案

基本用法:

  • r:只讀模式(預設)
  • w:只寫模式。【不可讀,不存在則建立檔案;存在則刪除原有內容】
  • a:追加模式。【可讀,不存在則建立檔案;存在則只追加內容】

“+”表示可以同時寫某個檔案

  • r+:可讀可寫
  • w+:寫讀
  • a+:和a用法一致

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

  • ru
  • r+u

“b”表示處理二進位制檔案(如:FTP傳送上傳iso映象檔案,linux可忽略,windows處理二進位制檔案時需標註)

  • rb
  • wb
  • ab

基本用法:

 1 #往檔案裡寫;
 2 f = open('gala.txt','w')
 3 print(f.write('Sunday s coming I wanna drive my car\n'))
 4 print(f.write('這週日我想開著我的愛車\n'))
 5 f.close()
 6 
 7 #往檔案裡追加;預設是追加到後面;
 8 f = open('gala.txt','a')
 9 print(f.write('To your apartment with the present like a star\n'))
10 print(f.write('像明星一樣帶著的禮物去你的公寓\n'))
11 f.close()
12 
13 f = open('gala.txt','a')
14 print(f.write('Forecaster said the weathers may be rainy hard\n'))
15 print(f.write('天氣預報說天氣糟透了'))
16 f.close()
17 
18 ##############################
19 f = open('gala.txt','r+')
20 print(f.readline())     #只讀取一行
21 print(f.readline())     #只讀取一行
22 print(f.readlines())    #讀取所有行
23 #高階寫法;一行一行讀取檔案內容;
24 count = 0
25 for line in f:
26     count +=1
27     if count == 9:
28         print('-----woshi fen-----')
29         continue
30     print(line)
31 
32 
33 print(f.seek(10))    #把游標移動到指定位置
34 print(f.tell())     #檢視游標位置
35 print(f.encoding)   #檢視字符集編碼
36 print(f.truncate(10))    #截斷,從指定位置到末尾截斷
37 print(f.flush())         #重新整理緩衝區;

with語句

為了避免開啟檔案後忘記關閉,可以通過管理上下文方式,當執行完畢時會自動關閉並釋放檔案資源,即:

1 #之前用法
2 f = open('gala.txt''r+')
3 print(f.readlin())
4 
5 #with用法;在with下執行語句
6 with open('gala.txt','r+') as f:
7     print(f.readline())

6.字元編碼與轉碼

  • python3裡預設是unicode編碼
  • unicode分為utf-32(佔4位元組),utf-16(佔兩個位元組,是最常用的unicode版本),utf-8(佔1-4位元組)
  • 在py3中encode在轉碼的同時還會把string變成bytes型別,decode在解碼的同時還會把bytes變回string

GBK轉UTF-8格式流程:

  • 首先通過編碼【decode】轉換為unicode編碼
  • 再通過解碼【encode】轉換為utf-8

UTF-8轉GBK格式流程:

  • 首先通過編碼【decode】轉換為unicode編碼
  • 再通過解碼【encode】轉換為GBK

open() 函式常用形式是接收兩個引數:檔名(file)和模式(mode)。