python小筆記

  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、ornotinnot 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     
相關文章
相關標籤/搜索