python經常使用函數以及模塊(二)

  1. 隨機數模塊。
    php

import random

arr = [1, 2, 3, 4]

print random.random() #返回0.0~1.0的隨機數

print random.uniform(0.5, 0.8) #範圍內隨機數

print random.randint(1, 5) #範圍隨機整數

print random.choice(arr) #數組,元組中隨機一個數

print random.sample(arr, 2) #數組,元組中隨機兩個數

random.shuffle(arr)   #打亂數組,不能用在元組上

print arr

#result:
0.504674499914
0.79300720529
1
1
[1, 4]
[3, 2, 4, 1]

2. 數據對象持久化。html

try:
    import pickle
except:
    import CPickle as pickle   # CPickle是pickle的c語言版,更快

arr = [123, [1, 2, 3], {'a':'A'}, (1, 2, 3)]

pack = pickle.dumps(arr)
unpack = pickle.loads(pack)

3. csv模塊。
python

import csv


with open('a.csv', 'wb') as fp:

    writer = csv.writer(fp)

    for n in range(5):
        writer.writerow([str(n), str(n) * 2, str(n) * 3])  #每次寫一行

with open('b.csv', 'wb') as fp:

    writer = csv.writer(fp)

    writer.writerows([(1, 11, 111), (2, 22, 222)]) #一次寫多行
    
with open('a.csv', 'rb') as fp:

    data = csv.reader(fp)

    for line in data:

        print line

4. urlparse模塊。數組

# 格式化urlparse,獲取host,path,query等參數

import urlparse

print urlparse.urlparse('http://www.iplaypython.com/module/urlparse.html')

5. urllib模塊緩存

import urllib

bd = urllib.urlopen('www.baidu.com')

1 )、read(), readline(), readlines(), fileno(), close(),看到沒有與咱們操做文件的方法都是同樣的。
2 )、info() ,返回一個httplib.HTTPMessage這個python對象,能夠顯示你訪問的網絡資源服務器的HTTP頭部信息。
3 ) 、getcode() ,它的做用是返回http網頁狀態碼,200是成功訪問,404是未找到,還有其它301狀態碼等
4 )、geturl(),返回你請求的url地址。
服務器

#下載文件
file = urllib.urlretrieve(url, filename)

#臨時緩存文件
file = urllib.urlretrieve(url)
#清除緩存
urllib.urlcleanup()

#url編碼
url = 'http://www.baidu.com'
urllib.quote(url)   # urllib.unquote(url) 反向
#result: http%3A//www.baidu.com
urllib.quote_plus(url)  # urllib.unquote_plus(url)  反向
#result: http%3A%2F%2Fwww.baidu.com

url的GET提交和POST。
cookie

# GET方法
import urllib
para = urllib.urlencode({'m':'aa', 'a': 'bb'})
fp = urllib.urlopen('http://www.1123123123.com/?%s' %para )
string = fp.read()

#POST方法

fp = urllib.urlopen('http://www.1123123123.com' para)
string = fp.read()

5.1 urllib2模塊。網絡

加頭部訪問dom

import urllib2

#加頭部訪問
request = urllib2.Request(url, urllib.urlencode(data), headers = {"User-Agent": "Mozilla-Firefox5.0"})

# 或者
request = urllib2.Request(url)
request.add_header({"User-Agent": 'Mozilla-Firefox5.0'})
response = urllib2.urlopen(request)

#或者
header={"User-Agent": "Mozilla-Firefox5.0"}
urllib2.urlopen(url, urllib.urlencode(data), header)

超時設置ide

#設置超時
response = urllib2.urlopen('http://www.google.com', timeout=10)

傳遞cookie登陸

#傳遞cookie登陸

import urllib
import urllib2
import cookielib
   
#聲明一個MozillaCookieJar對象實例來保存cookie,以後寫入文件
cookie = cookielib.CookieJar()
 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({
      'stuid':'201200131012',
      'pwd':'23342321'
    })
     
#登陸教務系統的URL
loginUrl = 'http://www.baidu.com/login.php'
 
#模擬登陸,並把cookie保存到變量
result = opener.open(loginUrl,postdata)
 
#利用cookie請求訪問另外一個網址,此網址是成績查詢網址
gradeUrl = 'http://www.baidu.com/info.php'
 
#請求訪問成績查詢網址
result = opener.open(gradeUrl)
 
print result.read()

Debug模式

#debug 模式

import urllib2 
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler) 
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.123123123.com')

設置代理訪問

#設置代理訪問

import urllib2
enable_proxy=True
proxy_handler=urllib2.ProxyHandler({‘http‘:‘http://some-proxy.com:8080‘})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)

urllib和urllib2的區別:

urllib提供urlencode方法用來GET查詢字符串的產生,而urllib2沒有。這是爲什麼urllib常和urllib2一塊兒使用的緣由。

urllib2模塊比較優點的地方是urlliburllib2.urlopen能夠接受Request對象做爲參數,從而能夠控制HTTP Request的header部。

可是urllib.urlretrieve函數以及urllib.quote等一系列quote和unquote功能沒有被加入urllib2中,所以有時也須要urllib的輔助。


7. resquests模塊的用法。是urllib和urllib2的加強版。

import requests

#get 方式
html = requests.get(url, headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}).content

#post方式

html = requests.post(url, headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}, data={'a':'aa', 'b':'bb'}).content

6. robotparser,判斷robots.txt文件是否容許url被讀取

import robotparser
import urlparse

agent_name = 'IPLAYPYTHON'

url_base = 'http://www.iplaypython.com/'

parse = robotparser.RobotFileParser()

parse.set_url(urlparse.urljoin(url_base, 'robots.txt'))

parse.read()

paths = ['/', '/tags/', '/admin/']


for path in paths:

    print '%6s: %s' %(parse.can_fetch(agent_name, path), path)

    url = urlparse.urljoin(url_base, path)

    print '%6s : %s' % (parse.can_fetch(agent_name, url), url)

7. base64編碼。

import base64
encode = base64.b64encode('我靠')
print encode
print base64.b64decode(encode)

8. smtplib模塊。

#正常的郵件

#!/usr/bin/python
# coding:utf-8

# -*- coding: utf-8 -*-

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( \
        Header(name, 'utf-8').encode(), \
        addr.encode('utf-8') if isinstance(addr, unicode) else addr))

from_addr = raw_input('From: ')  # 發送方郵件帳戶,qwerty@163.com
password = raw_input('Password: ') # 發送方密碼, 123123 , 這個密碼不是郵箱密碼,而是在郵箱設置裏面IMAP/#SMTP服務開啓後的設置密碼

to_addr = raw_input('To: ')  # 12312321@qq.com
smtp_server = raw_input('SMTP server: ') # smtp.163.com

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')  #郵件內容

#若是想發送html

msg = MIMEText('<html><body><h1>Hello</h1>' +
    '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
    '</body></html>', 'html', 'utf-8')

msg['From'] = _format_addr(u'Python愛好者 <%s>' % from_addr) #郵件發送者的名稱
msg['To'] = _format_addr(u'管理員 <%s>' % to_addr)
msg['Subject'] = Header(u'來自SMTP的問候……', 'utf-8').encode()  #郵件標題

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)

server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

注意:有的能夠不設置發送帳戶,但會被郵箱過濾爲垃圾郵件。

#發送帶附件的郵件

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( \
        Header(name, 'utf-8').encode(), \
        addr.encode('utf-8') if isinstance(addr, unicode) else addr))

from_addr = raw_input('From: ')
password = raw_input('Password: ')
to_addr = raw_input('To: ')
smtp_server = raw_input('SMTP server: ')

msg = MIMEMultipart()
msg['From'] = _format_addr(u'Python愛好者 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理員 <%s>' % to_addr)
msg['Subject'] = Header(u'來自SMTP的問候……', 'utf-8').encode()

# add MIMEText:
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))

#若是在html中顯示圖片
msg.attach(MIMEText('<html><body><h1>Hello</h1>' +
    '<p><img src="cid:0"></p>' +
    '</body></html>', 'html', 'utf-8'))

# add file:
with open('./UML.png', 'rb') as f:
    mime = MIMEBase('image', 'png', filename='test.png')
    mime.add_header('Content-Disposition', 'attachment', filename='test.png')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    mime.set_payload(f.read())
    encoders.encode_base64(mime)
    msg.attach(mime)

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
相關文章
相關標籤/搜索