1 python特色 2 python使用縮進 3 多個語句在一行使用;分隔 4 註釋爲#,多行註釋doc string() 5 cmd的pip安裝 6 pip install selenium #安裝 7 pip list #查看安裝了哪些包 8 pip uninstall selenium #卸載 9 py -3 -m pip install selenium #python安裝在python3.0上 10 11 打印 12 print("hello"," ","world"); 13 name=input("輸入你的名字"); 14 print(name); 15 16 數據類型 17 整數 int 18 浮點數 float 19 布爾值 bool 20 空值 None 21 type{a} #查看a的變量類型 22 23 變量賦值(不區分單雙引號) 24 a=100 #int 25 b="test" #字符串 26 x=y=z=1 #多重賦值 27 x,y,z=1,2,"str" #多元賦值 28 int(a);str(a); #類型轉換 29 30 運算符 31 3 * 5 32 3 ** 2 #乘方 33 5 / 2 34 5%2 35 "hello"+"world" 36 10 // 3 ; #整除,返回值爲幀整數部分; 37 38 註釋: 39 單行註釋# 40 多行註釋 41 """ 42 註釋內容 43 """ 44 轉義 45 \ 46 \n 換行 47 \也能夠續行,表示沒有輸完 48 49 字符串 50 print("%d(x)是一個數字,%s(y)是一個字符串"%(x,y)); 51 %d(data)打印數字 52 %s(string)打印字符串 53 若是沒法肯定種類種類則用%r 54 l=[1,2,3] 55 print("這個列表的內容是%r" % l ) 56 57 字符串操做 58 #好比a="abc";b="cde" 59 + 字符串鏈接 60 * 字符串重複輸出 a*2 ,輸出aa 61 [] 索引,a[0]="a",a[-1]="c" 62 [ : ] 63 in 64 not in 65 r/R 66 % 格式字符串 67 68 字符串常見函數方法 69 L=['a','b','c']; 70 "".join(L) #拼接成abc 71 "_".join(L) #拼接成a_b_c 72 L="a,b,c" 73 L.split(",") #換成list類型,以,分割 74 str.endswith(obj,beg=0,end=len(string)); 75 76 A="abcdefdasd1"; 77 A.find('1'); 78 "_".join(A); #輸出'a_b_c_d_e_f_d_a_s_d_1' 79 len(A) #11 80 A.replace("a","A");#'AbcdefdAsd1' 81 A.split("a"); #['', 'bcdefd', 'sd1'] 82 A.strip('a'); #左右各處理掉a字符,'bcdefdasd1' 83 A.startswith('a',0,len(A)); #true 84 85 列表list 86 賦值、索引 87 A[1][1]取索引爲1的元素中的索引爲1的元素 88 基本操做 89 切片,從左邊開始取值 90 好比A=[1,2,3,4,5] 91 A[1:3] 表示取值爲A[1],A[2] 92 A[x:y] 表示取值A[x]到A[y-1]這個範圍內 93 A[0:-2]從最左邊取值到最右倒數第二個但不包含這個數,這裏就是[1, 2, 3, 4] 94 95 list函數 96 len(list) 97 max(list)/min(list) 98 list(seq) 元祖轉換爲列表 99 100 list方法 101 list.append(obj); 列表末尾添加新的對象 102 list.count(obj); 對指定元素計數 103 list.extend(seq); 插入序列類的東西到末尾,好比字符串,list 104 list.index(obj); 找到某個元素的位置 105 list.insert(index,obj); 在指定位置插入 106 list.pop(index); 刪除某元素 107 list.remove(obj); 刪除某元素 108 list.reverse(); 反序 109 list.sort(); 排序 110 list.clear(); 清空 111 list.copy(); 創建副本 112 list.strip() 方法用於移除字符串頭尾指定的字符(默認爲空格) 113 114 115 元祖tuple 116 特點: 117 1、和list類似,最大的不一樣元祖是一種只讀且不可讀的數據結構 118 2、不可替代元祖中的全部元素,至刻度不可更變 119 3、list與tuple能夠相互轉換,tuple(list)、list(tuple) 120 121 賦值: 122 h=(2,[3,4],(23112,2)); #多維列表 123 h=(1,) #一個元素時必需要打逗號,由於h=(1)與h=1一致。 124 125 字典:Dict 126 a={'x':3, 'y':4, 'z':5 } 127 #x就是key不能爲數字;3表示value值;和json格式類似 128 a['xx']=333; #表示又插入一個鍵爲'xx',值爲'333'的元素; 129 #結果是a字典就是{'x': 3, 'y': 4, 'z': 5, 'xxx': 2333} 130 131 132 字典的函數方法: 133 dict.clear() 134 dict.copy(); 135 dict.get(key,None); #返回指定鍵的值,若沒有返回"None" 136 key in dict 137 dict.items() #以列表返回可遍歷的(鍵,值)元祖數組 138 dict.keys() #以列表返回一個字典全部的鍵 139 dict.setdefault(key,None)#和get()類似,但若是鍵不存在字典中,會添加一個key鍵,值爲None 140 dict.update(dict2) #把字典dict2的鍵/值對更新到dict裏 141 dict.values() #返回字典中全部的值; 142 dict.pop(key,None) #刪除鍵Key對應的值,返回被刪除的值,key值不存在返回None。若是Key不存在,又沒有默認值,則報錯。 143 144 條件語句 145 if y>0: 146 print("y>0") 147 elif y==0: 148 print("y==0") 149 else: 150 print("y<0") 151 ################ 152 布爾表現式---邏輯操做符and、or、not、in、not in 153 a=2;b=4;c=6 154 if b>=a and b<=c: 155 print("b is between a and c") 156 157 if not (b<a or b>c): 158 print("b is still between a and c") 159 ###################### 160 while語句 161 i=5 162 while i>0: 163 print("ss") 164 i=i-1 165 166 ###################### 167 For語句 168 for i in [3,4,10,25]: 169 print(i) 170 171 for i in "helloworld": 172 print(i) 173 174 for i in range(10): #i從0取到9 175 print(i) 176 177 A=[] 178 for j in [3,4,5,6]: 179 A.append(j**2) 180 181 182 range(1,10) #從1取到10 183 range(1,10,2) #從1取到10,每隔2取一次值 184 185 186 ####################### 187 控制流終止 188 continue 189 break 190 191 192 193 194 195 196 ############################### 197 函數 198 def語句 199 def 函數名(參數1,參數2,參數3) 200 語句塊 201 202 def divide(a,b): 203 q=a/b 204 r=a-q*b 205 return q,r 206 207 #調用 208 x,y=divide(42,5) #x=8,y=2 209 x=divide(42,5) #x=(8,2)是tuple元祖 210 211 def add(a,b=2): #a爲位置參數,b爲默認參數、默認取值爲2。默認參數在位置參數以後 212 s=a+b 213 return s 214 215 def fenshu(name,socre=90): 216 print('%s的分數爲%d'%(name,score)) 217 218 219 #調用分數 220 fenshu('張三',) 221 t=('李四',80) 222 fenshu(*t) 223 224 ############### 225 #一、可變參數 226 def func(*a): #若是輸入爲1,23,4,4,5;那麼a=(1,23,4,4,5)元祖 227 sum=0 228 for n in a: 229 sum=sum+n 230 return sum 231 232 def fenshu(name,socre=90): 233 print('%s的分數爲%d'%(name,score)) 234 235 236 #二、可變參數 237 fenshu('張三') 238 t=('李四',80) 239 fenshu(*t) 240 241 242 ################################################# 243 關鍵字參數 244 def func(**kw) 245 可變參數容許傳入0或者任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。而關鍵字參數容許我傳入0~任意個含參數名的參數,這寫關鍵字參數在內自動組裝爲一個dict。與可變參數相同,須要使用dict的操做方法來操做dict 246 247 在調用函數時,咱們能夠將參數組裝成dict,經過func(**dict)的方式傳參 248 def func(name,age=20): 249 print("%s age is %d"%(name,age)) 250 251 p={'name':'bob','age':27} 252 func(**p) 253 254 參數組合 255 順序爲位置參數、默認參數、可變參數和關鍵字參數,形式: 256 def func(para,para2=None,*agrs,**kw) 257 ################################################# 258 類、對象 259 class Person(): 260 def __init__(self,name,age): #初始化,綁定實例屬性,特殊的方法,相似於java的構造函數,第一個參數必須是self 261 self.name=name 262 self.age=age 263 1、繼承 264 class Count(): 265 def __init__(self,a,b): #初始化類的屬性 266 self.a=a 267 self.b=b 268 def add(self): #類中的方法,第一個參數必須是self 269 return self.a+self.b 270 271 count = Count(3,5); #實例化對象,是否傳參取決於__init__ 272 count.add(); #調用對象的方法 273 274 class Father(): #表示無繼承父類,或者說這是繼承基類 275 def add(self,a,b): 276 return a+b 277 278 279 class Son(Father): 280 def div(self,a,b): 281 return a-b 282 >>> son=Son(); #實例化對象 283 >>> son.add(3,5) 284 >>> son.div(3,5) 285 286 ########################################################## 287 異常 288 try: 289 open("abc.txt",'r') 290 except IOError: 291 print "異常了!" 292 293 try: 294 print aa 295 except NameError: 296 print "這是一個 name 異常!" 297 298 299 try: 300 open("abc.txt",'r') 301 print aa 302 except BaseException: 303 print "異常了!" 304 全部的異常類有了新的基類 BaseException,Exception 一樣也繼承BaseException,因此咱們也可使用 BaseException 來接收全部的異常。 305 306 try: 307 print(s) 308 except NameError: 309 print("異常") 310 finally: 311 print("沒有異常") #finally如何都都會被執行 312 313 try: 314 print(s) 315 except NameError: 316 print("異常") 317 else: 318 print("沒有異常") #try正確纔會執行 319 ###讀取文件####################################################### 320 #coding=utf-8 321 import time 322 323 files =open('C:/Users/Lee/Desktop/test01.txt','r') 324 try: 325 # print(str) 326 for l in files: 327 print(l) 328 # time.sleep(1) 329 finally: 330 #files.close() 331 print ('Cleaning up ...closed the file') 332 ####################################### 333 334 335 336 ###################################### 337 338 引入包 339 import time 340 print(time.ctime()) 341 342 引入本身寫的模塊 343 344 345 ##########################導入寫的模塊的路徑 346 import sys 347 sys.path.append('C:\\test\\WorkSpace_Python\\Learn0904') 348 print(sys.path) 349 print(sys) 350 351 352 ################################### 353 open/文件操做 354 f=open('/tmp/hello','w') 355 356 #open(路徑+文件名,讀寫模式) 357 358 #讀寫模式:r只讀,r+讀寫,w新建(會覆蓋原有文件),a追加,b二進制文件.經常使用模式 359 讀寫模式的類型有: 360 361 rU 或 Ua 以讀方式打開, 同時提供通用換行符支持 (PEP 278) 362 w 以寫方式打開, 363 a 以追加模式打開 (從 EOF 開始, 必要時建立新文件) 364 r+ 以讀寫模式打開 365 w+ 以讀寫模式打開 (參見 w ) 366 a+ 以讀寫模式打開 (參見 a ) 367 rb 以二進制讀模式打開 368 wb 以二進制寫模式打開 (參見 w ) 369 ab 以二進制追加模式打開 (參見 a ) 370 rb+ 以二進制讀寫模式打開 (參見 r+ ) 371 wb+ 以二進制讀寫模式打開 (參見 w+ ) 372 ab+ 以二進制讀寫模式打開 (參見 a+ ) 373 374 375 #舉例:讀取文件 376 f=open('C:/Users/Lee/Desktop/123.csv','r+') 377 str=f.readlines() 378 379 for i in str: 380 print(i) 381 f.close() 382 383 #舉例:讀取csv文件 384 import csv 385 file1=open('C:/Users/Lee/Desktop/actual.csv','r+') 386 csv_reader=csv.reader(file1) 387 print(type(csv_reader)) 388 for row in csv_reader: 389 print(type(row)) 390 print(row[1]) 391 file1.close() 392 393 #寫入文件 394 f=open('C:/Users/Lee/Desktop/111.csv','a+') 395 num=[1,2,3,4,5] 396 char=['a','b','c','d','e'] 397 398 l=[] 399 for i in range(len(num)): 400 m=str(num[i])+','+char[i] 401 l.append(m) 402 f.write(str(l)+'\n') 403 f.close() 404 405 #寫入csv文件,這裏的row_all是獲取到的數據庫的內容,爲元祖 406 l=list(row_all) 407 f=open('D:/123.csv','a+',newline='') 408 writer=csv.writer(f) 409 num=len(l) 410 for i in range(num): 411 writer.writerow(l[i]) 412 f.close() 413 414 415 #####################################python發送郵件 416 #coding=utf-8 417 import smtplib 418 from email.mime.text import MIMEText 419 from email.header import Header 420 421 #發送郵箱 422 sender='lihujun101@163.com' 423 #接受郵箱 424 receiver=['316947664@qq.com'] 425 426 #發送主題 427 subject='測試' 428 #發送郵箱的服務器地址 429 smtpserver='smtp.163.com' 430 #發送郵箱用戶/密碼 431 user='lihujun101@163.com' 432 pwd='li1992hujun' 433 434 #郵件正文 435 msg=MIMEText('<html><h1>你好!!!' 436 '</h1><a href="http://baidu.com">這是一個連接</a></html>','html','utf-8') 437 msg['From']='李胡軍'#能夠寫出來表示發件人名字 438 msg['To']='316947664@qq.com' 439 msg['Subject']=Header(subject,'utf-8') 440 441 smtpObj=smtplib.SMTP(smtpserver,25) 442 443 smtpObj.login(user,pwd) 444 smtpObj.sendmail(sender,receiver,msg.as_string()) 445 446 ######################################################################## 447 ###帶附件發送郵件 448 #coding=utf-8 449 import smtplib 450 from email.mime.multipart import MIMEMultipart 451 from email.mime.text import MIMEText 452 from email.header import Header 453 454 #發送郵箱 455 sender='lihujun101@163.com' 456 #接受郵箱 457 receiver=['316947664@qq.com'] 458 459 #發送主題 460 subject='測試' 461 #發送郵箱的服務器地址 462 smtpserver='smtp.163.com' 463 #發送郵箱用戶/密碼 464 user='lihujun101@163.com' 465 pwd='li1992hujun' 466 467 #郵件正文 468 msg=MIMEMultipart() 469 msg.attach(MIMEText('<html><h1>你好!!!' 470 '</h1><a href="http://baidu.com">這是一個連接</a></html>','html','utf-8')) 471 472 msg['From']='李胡軍'#能夠寫出來表示發件人名字 473 msg['Subject']=Header(subject,'utf-8') 474 475 476 #附件 477 fj='C:\\Windows\\addins\\FXSEXT.ecf' 478 att=MIMEText(open(fj,'rb').read(),'base64','utf-8') 479 att["Content-Type"]= 'application/octet-stream' 480 att['Content-Disposition']='attachment; filename="test"' 481 msg.attach(att) 482 483 #發送 484 smtpObj=smtplib.SMTP(smtpserver,25) 485 smtpObj.login(user,pwd) 486 smtpObj.sendmail(sender,receiver,msg.as_string()) 487 488 ################################################################################### 489 490 491 492 493 494 #####lambda函數 495 f=lambda x:x*2 496 ''' 497 用 lambda 來聲明匿名函數,冒號(:)前面 x 表示入參,冒號後面 x*2 表示返回值。lambda 和普通的函數相比,省去了函數名稱,「匿名函數」也是由此而來。 498 ''' 499 等價於 500 def f(x): 501 return x*2 502 503 504 #######################################取出文件夾中最新的文件 505 #coding=utf-8 506 import os 507 508 #定義文件目錄 509 lists=os.listdir('D:\\123') 510 511 #按時間排序 512 lists.sort(key=lambda fn:os.path.getmtime('D:\\123\\'+fn)) 513 514 print('最新文件爲:'+lists[-1]) 515 lists.sort() 516 print(os.path.getmtime('D:\\123\\'+lists[-1])) 517 print(lists) 518 519 ########################################################## 520 from urllib import request 521 522 with request.urlopen('https://api.douban.com/v2/book/2129650') as f: 523 data=f.read() 524 print('狀態:',f.status,f.reason) 525 for k ,j in f.getheaders(): 526 print('%s %s'%(k,j)) 527 print('數據:',data.decode('utf-8')) 528 529 req=request.Request('http://www.douban.com/') 530 req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25') 531 with request.urlopen(req) as m: 532 print('狀態1:',m.status,m.reason) 533 for k,j in m.getheaders(): 534 print('%s :%s' %(k,j)) 535 print('數據1:',data.decode('utf-8')) 536 537 538 能夠直接做用於for循環的數據類型有如下幾種: 539 一類是集合數據類型,如list、tuple、dict、set、str等; 540 一類是generator,包括生成器和帶yield的generator function。 541 這些能夠直接做用於for循環的對象統稱爲可迭代對象:Iterable。 542 543 生成器不但能夠做用於for循環,還能夠被next()函數不斷調用並返回下一個值,直到最後拋出StopIteration錯誤表示沒法繼續返回下一個值了。 544 能夠被next()函數調用並不斷返回下一個值的對象稱爲迭代器:Iterator。 545 可使用isinstance()判斷一個對象是不是Iterator對象: 546 547 548 map函數/refuce函數/filter函數 549 >>>list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) 550 ['1', '2', '3', '4', '5', '6', '7', '8', '9'] 551 552 reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) 553 554 def is_odd(n): 555 return n % 2 == 1 556 557 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) 558 # 結果: [1, 5, 9, 15] 559 560 >>> sorted([36, 5, -12, 9, -21], key=abs) 561 [5, 9, -12, -21, 36] 562 563 564 列表生成式: 565 >>> [x * x for x in range(1, 11)] 566 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 567 568 等價於: 569 >>> L = [] 570 >>> for x in range(1, 11): 571 ... L.append(x * x) 572 ... 573 >>> L 574 575 576 577 閉包:相關參數和變量都保存在返回的函數中,這種稱爲「閉包(Closure)」 578 返回閉包時牢記的一點就是:返回函數不要引用任何循環變量,或者後續會發生變化的變量。 579 580 581 匿名函數 582 lambda x: x * x 583 等價於 584 def f(x): 585 return x * x 586 587 588 589 裝飾器: 590 這種在代碼運行期間動態增長功能的方式,稱之爲「裝飾器」(Decorator)。 591 592 593 Python做用域: 594 1、正常的函數和變量名是公開的(public),能夠被直接引用,好比:abc,x123,PI等 595 二、相似__xxx__這樣的變量是特殊變量,能夠被直接引用,可是有特殊用途,好比上面的__author__,__name__就是特殊變量,hello模塊定義的文檔註釋也能夠用特殊變量__doc__訪問,咱們本身的變量通常不要用這種變量名; 596 三、相似_xxx和__xxx這樣的函數或變量就是非公開的(private),不該該被直接引用,好比_abc,__abc等; 597 之因此咱們說,private函數和變量「不該該」被直接引用,而不是「不能」被直接引用,是由於Python並無一種方法能夠徹底限制訪問private函數或變量,可是,從編程習慣上不該該引用private函數或變量。 598 599 600 獲取對象信息: 601 1、使用type()判斷對象類型 602 二、使用isinstance('aaa',str)判斷對象類型 603 3、使用dir()得到一個對象的全部屬性和方法,可使用dir()函數,它返回一個包含字符串的list 604 >>> type(123) 605 <class 'int'> 606 >>> type('str') 607 <class 'str'> 608 >>> type(None) 609 <type(None) 'NoneType'> 610 >>> isinstance([1, 2, 3], (list, tuple)) 611 True 612 >>> hasattr(obj, 'x') # 有屬性'x'嗎? 613 True 614 >>> obj.x 615 9 616 >>> hasattr(obj, 'y') # 有屬性'y'嗎? 617 False 618 >>> setattr(obj, 'y', 19) # 設置一個屬性'y' 619 >>> hasattr(obj, 'y') # 有屬性'y'嗎? 620 True 621 >>> getattr(obj, 'y') # 獲取屬性'y' 622 19 623 >>> obj.y # 獲取屬性'y' 624 19 625 626 627 628 給一個實例綁綁定方法,可是對另外的實例無效 629 >>> def set_age(self, age): # 定義一個函數做爲實例方法 630 ... self.age = age 631 ... 632 >>> from types import MethodType 633 >>> s.set_age = MethodType(set_age, s) # 給實例綁定一個方法 634 >>> s.set_age(25) # 調用實例方法 635 >>> s.age # 測試結果 636 25 637